java - 如何在不获取完整实体的情况下获取依赖的 Hibernate 实体的外键列值?

标签 java hibernate

我正在努力解决一个似乎太简单的问题:

设置是在 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/

相关文章:

java - Eclipse JDT 类 ASTVisitor 未找到

java - Shift + 右箭头不使用机器人类选择文本,但几天前它曾经工作得很好

java - 使用 java Calendar API 的特定天数

java - Spring的值注释在构造函数参数中不起作用

java - 服务器整夜闲置后 C3P0 死锁

java - Hibernate 序列生成的自定义

java - 区分 sqlite 表中的重复行

hibernate - 忽略Hibernate @Where批注

hibernate - spring 3.1、hibernate 4、tiles2、tomcat 7 - 清理(多次部署导致内存泄漏)

java - Hibernate更新多个对象列表