jpa гибернация обновления один-к-одному

#java #hibernate #jpa #one-to-one

#java #спящий режим #jpa #один к одному

Вопрос:

Я работаю над программным обеспечением для управления квартирами, и у меня возникла проблема.

У меня есть две сущности :

 @Entity
public class Tenant extends AbstractEntity { //AbstractEntity contains the id
    @Column(nullable = false)
    private int number;
    @OneToOne
    private Apartment apartment;
}
 

и

 @Entity
public class Apartment extends AbstractEntity { //AbstractEntity contains the id
    @Column(nullable = false)
    private int number;
    @OneToOne
    private Tenant tenant;
}
 

Но когда я делаю

 EntityManager em = emProvider.get();
em.getTransaction().begin();

em.merge(apartment);
em.flush();

em.getTransaction().commit();
 

Это только сохраняет арендатора в квартире, но я бы хотел, чтобы он также обновил квартиру в арендаторе.

Мне действительно нужно установить поле apartment в tenant или есть способ просто это исправить? Спасибо

Сердечно, Баскво

Комментарии:

1. en.wikibooks.org/wiki/Java_Persistence/Relationships#Cascading

Ответ №1:

Вам необходимо объявить CascadeType.ALL в вашей квартире объект. См. Пример

 @OneToOne(cascade = CascadeType.ALL)
private Tenant tenant;
 

Каскадный тип.ВСЕ для всех операций CRUD. Настройка CascadeType зависит от потребностей вашего приложения.

Комментарии:

1. У меня к вам последний вопрос. Это не вступает в силу немедленно, когда я обновляю квартиру, поэтому мне нужно перезапустить приложение.

2. это зависит от вашего дизайна приложения. Если вы хотите увидеть последнюю обновленную запись в своем пользовательском интерфейсе, вы можете снова вызвать метод SELECT и вызвать em.refresh(yourobject)