Spring JPA удаляет связь @OneToOne - PullRequest
1 голос
/ 21 марта 2019

У меня есть приложение SpringBoot 2.1.3.RELEASE RESTful Web Service, использующее Spring Initializer, встроенный 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 Ответ

0 голосов
/ 21 марта 2019

Для двунаправленного OneToOne используйте атрибут mappedBy для определения обратного отображения.Владелец объекта ImpactHint использует @JoinColumn и имеет столбец FK.Вторая сущность:

public class ImpactHintAmendment {
    @OneToOne(mappedBy = "amendment")
    private ImpactHint impactHint; 

Если вы исправите свое отображение, тогда потерянное удаление attr.должен удалить Amendment без вызова remove

impactHint.setAmendment(null);
em.persist(impactHint);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...