Java 在JPA@OneToMany关系中更新集合元素的正确方法?
让我们假设父母和孩子之间有一个双向的一对多关系 我喜欢用集合来建模这种关系的想法,因为它具有不允许重复的内在本质 问题:Java 在JPA@OneToMany关系中更新集合元素的正确方法?,java,hibernate,jpa,orm,set,Java,Hibernate,Jpa,Orm,Set,让我们假设父母和孩子之间有一个双向的一对多关系 我喜欢用集合来建模这种关系的想法,因为它具有不允许重复的内在本质 问题: 1) 在这种情况下,正确的JPA方法是什么 查询父级并将更新的子级传递给它 直接查询子级并只调用其setter 2) 无论哪种方式,性能都有一些优点或缺点 @Entity public class Parent extends AbstractPersistable<Long> { @OneToMany(cascade = CascadeType.A
1) 在这种情况下,正确的JPA方法是什么
- 查询父级并将更新的子级传递给它李>
- 直接查询子级并只调用其setter
@Entity
public class Parent extends AbstractPersistable<Long> {
@OneToMany(cascade = CascadeType.ALL, ... )
private Set<Child> children = new HashSet();
public void addChild( Child child ) { ... }
public void removeChild( Child child ) { ... }
// non-anemic domain model ?
public void updateChild( Child child ) {
// how to update the element in the Set?
}
}
@实体
公共类父级扩展了可抽象持久化{
@OneToMany(级联=级联类型.ALL,…)
private Set children=new HashSet();
public void addChild(Child-Child){…}
public void removeChild(Child){…}
//非贫血区域模型?
public void updateChild(子项){
//如何更新集合中的元素?
}
}
更新:如何正确编写更新方法?由于Java中的集合没有get方法来更新子集合,因此不需要操作父集合 由于,一旦
子项在当前运行的持久性上下文中得到管理,每个更改都会自动拾取并同步到数据库
这就是为什么在JPA中没有update
方法的原因。只有在EntityManager
中才有
因此,您需要执行以下步骤:
您可以按id加载子项
:
Child child = entityManager.find(Child.class, childId);
对子项进行更改后,您就完成了:
child.setName(newName);
不会对你的表现产生任何影响。方法取决于数据的连接方式。但我认为这两者都可以,这取决于你想为infos做什么Hanks Vlad!