#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)