0

我有两个 JPA 实体:PersonAddress.

类是不同类使用的Address通用类。

Person课堂上,我有这样的@OneToOne关系:

@OneToOne(cascade = CascadeType.ALL)
private Address address;

RESOURCE_LOCAL在独立应用程序上使用带有选项的 JPA。

我实例化 a Person, an Address,填充所有属性并要求 JPA 保存所有的em.merge(person).

由于数据库中已经存在记录,我希望 JPA 更新所有信息。但是,如果我也更改了 person 实例上的某些内容,它只会更新地址信息。如果我只是更改地址实例的一些信息并要求 JPA 保存Person,则不会更新任何内容。我检查了 Hibernate 生成的 SQL 并在merge()操作时,它只SELECTperson表上执行 a(加入address表)。

在我拥有的Person和类中,以及Eclipse 的默认实现中。Addressequals()hashCode()

关于如何将更新级联到的任何想法Address

4

1 回答 1

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();

现在,如果您尝试更新PersonAddress,它们将不会被更新,因为对象现在已分离:

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");
于 2012-11-10T20:07:38.007 回答