我正在努力解决一个似乎太简单的问题:
设置是在 Hibernate 3 中具有多对一关系的两个实体:
@Entity
class M {
private N n;
@ManyToOne(fetch = FetchType.LAZY)
public N getN() { return n; }
public void setN(N n) { this.n = n; }
}
@Entity
class N {
private List<M> ms = new ArrayList<M>();
@OneToMany(mappedBy="n")
public List<M> getMs() { return ms; }
public void setMs(List<M> ms) { this.ms = ms; }
}
很简单。在我的应用程序中,我有一个 M
列表,这些列表要么有一个 N
,要么没有。此列表是 h:dataTable
的输入,它根据 FK 是否为 null 显示不同的列内容。但是当我测试 m.getN() != null
时,这会导致 hibernate 加载 N
。我怎样才能避免这种情况?
编辑:正如 JBNizet 在评论中指出的那样,这实际上是我的一个错误。为了至少使它对某些人有用并保持上面的布局,我将问题改写为“如何在不获取完整实体的情况下获取依赖的 Hibernate 实体的外键列值?”正如 Aaron Digulla 所建议的那样。
编辑 2:原来新问题是这个问题的重复:How can I prevent Hibernate fetching joined entities when I access only the foreign key id? - 那么,关闭投票?
最佳答案
创建一个投影映射,其中包含 M 个或 M 的多个字段,例如N的编号
您的查询可能看起来像这样
select new com.my.ProjectionObject(m, m.n.id) from M m where ...
关于java - 如何在不获取完整实体的情况下获取依赖的 Hibernate 实体的外键列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11776502/