0
У меня есть следующие классы в ont для одного отношения.удаление дочернего объекта в двунаправленных отношениях OneToOne
DrivingLicense.java
@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;
}
и
Person.java
@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)
private DrivingLicense drivingLicense;
}
Теперь, когда я пытаюсь удалить водительские права лица, то его не удалить его, я запутался, как удалить по отдельности водительские права?
entityManager.getTransaction().begin();
DrivingLicense drivingLicense = entityManager.find(DrivingLicense.class, 6);
entityManager.remove(drivingLicense);
entityManager.getTransaction().commit();
Обновление
вместо удаления его обжиг ниже двух выбирает
Hibernate: select drivinglic0_.LICENSE_NUMBER as LICENSE_NUMBER1_0_0_, drivinglic0_.DATE_OF_ISSUE as DATE_OF_ISSUE2_0_0_, drivinglic0_.PERSON_ID as PERSON_ID3_0_0_, person1_.PERSON_ID as PERSON_ID1_1_1_, person1_.PERSON_NAME as PERSON_NAME2_1_1_ from DRIVING_LICENSE drivinglic0_ left outer join PERSON person1_ on drivinglic0_.PERSON_ID=person1_.PERSON_ID where drivinglic0_.LICENSE_NUMBER=?
Hibernate: select drivinglic0_.LICENSE_NUMBER as LICENSE_NUMBER1_0_1_, drivinglic0_.DATE_OF_ISSUE as DATE_OF_ISSUE2_0_1_, drivinglic0_.PERSON_ID as PERSON_ID3_0_1_, person1_.PERSON_ID as PERSON_ID1_1_0_, person1_.PERSON_NAME as PERSON_NAME2_1_0_ from DRIVING_LICENSE drivinglic0_ left outer join PERSON person1_ on drivinglic0_.PERSON_ID=person1_.PERSON_ID where drivinglic0_.PERSON_ID=?
почему эти 2 выбирает обжигают?
да, это сработало !! можете ли вы также добавить причину, по которой эти два выбора уволены? – eatSleepCode
Я могу только догадываться, но я думаю, что диспетчер сущности проверяет перекрестные ссылки водительских прав, которые вы хотите удалить (кому назначено ваше водительское удостоверение), чтобы предотвратить разрыв ссылочной целостности ваших баз данных при удалении водительских прав без удаление значения столбца соответствующего внешнего ключа. – Smutje
У меня есть простые сомнения в моем дизайне таблиц с этим отношением, если таблица 'PERSON' содержит' fk' 'DRIVING_LICENSE' или' DRIVING_LICENSE', должна содержать 'fk'' PERSON'? каковы плюсы и минусы обоих? – eatSleepCode