Mar*_*lze 6 java performance hibernate jpa
我在J2SE项目中使用JPA + Hibernate和PostGre SQL数据库.
我有2个实体一个和乙.A与B有@OneToMany关系.
在我的域模型一个可能会引用数百万乙的.当我向集合添加新对象时,需要几分钟才能完成.
@OneToMany(cascade=CascadeType.PERSIST)
Collection<B> foo = new ArrayList<B>(); // might contain millions of records
//...
// this takes a lot of time
foo.add(new B());
Run Code Online (Sandbox Code Playgroud)
我认为JPA在插入新对象之前获取整个集合.是否有可能配置关系,以便通过向集合中添加新对象而不执行获取操作?
使用 JPA 时 @OneToMany 关系是延迟加载的。这意味着对 foo 的任何调用都将导致 JPA 加载数据库中引用的所有条目。
我知道避免这种情况的唯一方法是反转您的关系,并在 B 上定义 @ManyToOne 关系(指向 A)。这样,您就不需要加载集合来在数据库中插入新对象。
这是一个代码示例:
public class B {
@ManyToOne
private A a;
public void foo() {
A a = new A();
B b = new B();
b.setA(a); // Instead of a.getFoo().add(b);
// Persist b in database...
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1031 次 |
最近记录: |