Tom*_*ker 4 java hibernate jpa
我正在使用JPA 2和Hibernate 3.我注意到调用EntityManager.merge()会在对象图中的每个引用实体上产生一个SELECT,并在其中一些实体之间加入内部连接.
假设你想合并()一个FooBar.
@Entity
public class FooBar {
@ManyToOne
private Foo foo;
@ManyToOne
private Bar bar;
}
@Entity
public class Foo {
@ManyToOne
private Baz baz;
}
@Entity
public class Bar {
@ManyToOne
private Baz baz;
}
Run Code Online (Sandbox Code Playgroud)
如果你这样做,Hibernate将为FooBar,Foo和Bar发出一个SELECT,为Baz发出两个SELECT.然后,它将发出一个SELECT for Foo与Baz连接,另一个用于Bar与Baz一起加入.因为我只想合并一个FooBar,所以我期待从中获得一个SELECT,但我最终得到了一个惊人的7个SELECT!
首先,这是正常的吗?第二,如果是,有没有办法只发出一个SELECT?
谢谢.
您正在merge(..)使用分离的对象(即与会话无关的对象)进行调用.hibernate在这里做的是 - 它从数据库加载一个具有传递对象id的实体,并且:
在后一种情况下,涉及到DB的加载,因此Hibernate需要获取整个对象.因此,许多选择.
您可以尝试fetchType=LAZY的ManyToOne关系(它们在默认情况下急于).
| 归档时间: |
|
| 查看次数: |
2005 次 |
| 最近记录: |