牽強我不能夠刪除相關的實體實例牽強使用查詢相關的實體,我有以下類無法刪除使用查詢
@Entity
@Table(name = "PERSON")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "PERSON_ID")
private int personId;
@Column(name = "PERSON_NAME", nullable = false, length = 30)
private String personName;
@OneToOne(mappedBy = "person", cascade = CascadeType.ALL)
//@Fetch(FetchMode.JOIN)
private DrivingLicense drivingLicense;
}
和
@Entity
@Table(name = "DRIVING_LICENSE")
public class DrivingLicense {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "LICENSE_NUMBER")
private int licenseNumber;
@Column(name = "DATE_OF_ISSUE")
private Date dateOfIssue;
@OneToOne
@JoinColumn(name = "PERSON_ID")
private Person person;
}
,我試圖刪除像
entityManager.getTransaction().begin();
List<Person> resultList = entityManager.createQuery("from Person p join fetch p.drivingLicense", Person.class).getResultList();
resultList.forEach(person -> System.out.println(person.getDrivingLicense().getDateOfIssue()));
DrivingLicense drivingLicense = resultList.get(0).getDrivingLicense();
System.out.println(drivingLicense.getLicenseNumber());
entityManager.remove(drivingLicense);
entityManager.getTransaction().commit();
我認爲它會刪除DrivingLicense,但不會刪除它。當我試圖通過使用entityManager.remove(resultList.get(0))
刪除Person時,它隨DriverLicense一起刪除了該人。
我得到它是如何工作的?爲什麼DrivingLIcense沒有被刪除?
我得到了它的原因。它沒有被刪除,因爲Person引用仍然指的是DrivingLicense Reference,它不會讓它被刪除,所以當引用被設置爲null時它就起作用了! – eatSleepCode