我有两个JPA实体:Person
和Address
。
Address
类是不同类使用的常见classe。
在Person
课程中,我有一个@OneToOne
关系:
@OneToOne(cascade = CascadeType.ALL)
private Address address;
我在独立应用程序中使用带RESOURCE_LOCAL
选项的JPA。
我实例化Person
,Address
,填写所有属性,并要求JPA按em.merge(person)
保存全部。
由于数据库中已经存在记录,我希望JPA能够更新所有信息。但是,如果我也在人物实例上也改变了某些内容,它只会更新地址信息。如果我只是更改地址实例的一些信息并要求JPA保存Person
,则不会更新任何内容。我通过Hibernate检查生成的SQL,并且在merge()
操作中,它只在SELECT
表执行person
(加入address
表)。
在Person
和Address
类中,我使用Eclipse的默认实现equals()
和hashCode()
。
有关如何将更新级联到Address
?
答案 0 :(得分:0)
在Person
课程中:
@OneToOne(cascade = CascadeType.ALL)
private Address address;
保存时,您可以执行以下操作:
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.saveOrUpdate(person);
// Hibernate will automatically update because the object is in persistence context
address.setStreetName(" Updated Street Name");
// Hibernate will automatically update because the object is in persistence context
person.setPersonName("Updated Name");
session.getTransaction().commit();
// person object is now detached
session.close();
现在,如果您尝试更新Person
或Address
,则不会更新它们,因为该对象现已分离:
user.setUserName("If you try to update, it will not since session is closed");
address.setStreetName("If you try to update, it will not since session is closed");