如何在不更新实体类的情况下更新关联表

时间:2016-08-29 06:36:49

标签: java mysql hibernate jpa

假设我在两个实体类Person和Address之间存在双向@many_to_Many关系。

在我的例子中,填充表Person和Address时,不会填充关联表Person_Address。如果我在Person和Address表中已经有一些条目,那么我需要将关联记录添加到Person和Address中,如何在JPA和Hibernate中执行此操作?

Person
1 John
2 Mary
3 Kate

Address
1 The 2nd Street
2 The 3rd Street

现在我有一种方法可以在" John"之间添加关联。和#34;第二街",怎么做?

public void associate(Person person, Address address) {
   log.info("Associating ..." );

   entityManager.persist(???); // there is no explicit PersonAddress enitty
}

这是关联表的常见场景吗?

2 个答案:

答案 0 :(得分:1)

如果不更新实体类,您无法在JPA中执行此操作,而不是JPA的工作方式。链接表用于支持实体,默认情况下不是实体本身,因此无法单独更新。

如果您需要更新链接表而不更新实体(说实话对我来说有点奇怪!),您可以下载到本机SQL:

Query q = entityManager.createNativeQuery("update ...");
q.executeUpdate()

然而,您最好的方法是允许JPA使用正确的级联属性集来管理此关系。然后它变成了一个简单的例子:

person.getAddresses().add(address);
address.getPeople().add(person);
entityManager.persist(person);

答案 1 :(得分:0)

我会尝试再创建一个映射到关联表的实体PersonAdress并将其保存在您的方法中。