我有以下实体:如何检索一个实体,该实体是另一个实体的属性,可能的开销较少?
@Entity
public class A{
...
@ManyToOne(optional=false, fetch=FetchType.LAZY)
@NotFound(action=NotFoundAction.EXCEPTION)
@JoinColumn(name="ID_CLASSB", nullable=false, insertable=true, updatable=true)
private B b;
...
private String anIdentifier;
...
@OneToMany(fetch=FetchType.LAZY)...
private List<C> manyObjects;
...
@OneToMany(fetch=FetchType.LAZY)...
private List<D> soMany;
}
正如你可以看到实体B是实体A.属性
乙实体没有参照实体,由简单的属性进行:
@Entity
public class B{
@Column(...)
private String field1;
@Column(...)
private int field2;
...
}
现在,我想从“anIdentifier”属性与特定值相匹配的A实体中检索所有B实体。 我的查询,就目前而言,将是:
"select a.b from A a where a.anIdentifier='identifier'"
问题是,这第二个查询是特别慢......我想这是因为休眠还是创建之前整个实体A(因而其所有属性)提取实体B.
那么,是否有另一种最有效的方式来实现我的目标?
“B”是否有对“A”的反向引用?我不希望这个查询初始化所有的''',但你可以记录生成的SQL语句来检查。 – 2015-03-31 08:53:56
和SQL是?除非您提供它现在所做的参考信息,并且显示所调用的SQL是唯一方法,否则您无法询问开销 – 2015-03-31 09:58:31