#hibernate #spring-boot #spring-mvc #jpa #spring-data-jpa
#переход в спящий режим #весенняя загрузка #spring-mvc #jpa #spring-data-jpa
Вопрос:
У меня есть приложение веб-службы SpringBoot 2.1.3.RELEASE RESTful., использующее инициализатор Spring, встроенный Tomcat, механизм шаблонов Thymeleaf и пакет в виде исполняемого JAR-файла, у меня есть этот объект:
public class ImpactHint implements Serializable {
@OneToOne(mappedBy = "impactHint", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "IA_ID")
private ImpactHintAmendment amendment ;
...
}
а также
public class ImpactHintAmendment implements Serializable, IEntity<String> {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
private String id;
@OneToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "IA_ID")
private ImpactHint impactHint;
..
}
Я пытаюсь удалить, используя
em.remove(impactHint.getAmendment());
em.persist(impactHint);
а также
impactHint.setAmendment(null);
em.persist(impactHint);
в моем классе репозитория, но ничего не работает
@Repository
public class ImpactHintDao extends AbstractDao<ImpactHint, String> implements IImpactHintDao {
@PersistenceContext
private EntityManager em;
..
}
Ответ №1:
Для двунаправленного использования OneToOne используйте mappedBy
атрибут для определения обратного отображения. Объект-владелец ImpactHint использует @JoinColumn
и имеет столбец FK. Второй объект:
public class ImpactHintAmendment {
@OneToOne(mappedBy = "amendment")
private ImpactHint impactHint;
Если вы исправите свое сопоставление, то произойдет удаление сирот. следует удалить Amendment
без вызова remove
impactHint.setAmendment(null);
em.persist(impactHint);