【问题标题】:Why does my hibernate join only return queries from one table?为什么我的休眠连接只返回一张表的查询?
【发布时间】:2013-06-18 02:36:44
【问题描述】:

我的查询是:

            List<EmpModel> EmpData = sess2.createCriteria(EmpModel.class)
          .setFetchMode("TestModel", FetchMode.JOIN)  
          .add(Property.forName("id").in(emp_ids)).list();

现在,触发的查询完全正确。它返回 test 和 emp 表的一对一连接。但是,返回的打印语句只给了我 EmpModel 表中的值。我相信这样做的原因是上面提到的 emp_ids 总是出现为零,而测试表中的每个值都是空的。谁能告诉我如何克服这个错误?

【问题讨论】:

  • EmpModel的定义是什么?它是否包含连接实体的集合?如果没有更多上下文,您的问题是不完整的。
  • 是的它确实...它包含一个集合,所有映射都是正确的。我的意思是,有没有办法在不正确的情况下获得正确的查询?!

标签: java hibernate join hibernate-criteria


【解决方案1】:

如果您希望条件也返回 TestModel 实例,您可以添加另一个条件和结果转换器。你没有发布你的实体,所以如果EmpModel 有一个属性testModel

List<<HashMap<String, Object>> EmpData = sess2.createCriteria(EmpModel.class)
  .add(Property.forName("id").in(emp_ids))
  .createAlias("testModel", "tm")
  .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)
  .list();

请注意,返回类型从List&lt;EmpModel&gt; 更改为List&lt;&lt;HashMap&lt;String, Object&gt;&gt;,因为现在查询将返回HashMaps 的列表。每个 HashMap 都会有一个 "this" 条目指向 EmpModel,还有一个 "tm" 条目(我们在构建查询时分配的别名)指向对应的 TestModel

PS:我从代码中删除了setFetchMode。不知何故,这不适用于上述方法。

【讨论】:

  • 原来问题出在映射上。不过还是谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2015-04-17
相关资源
最近更新 更多