【问题标题】:Criteria generates SQL Query correctly but it does not return anythingCriteria 正确生成 SQL 查询,但不返回任何内容
【发布时间】:2013-02-17 12:06:27
【问题描述】:

标准用于从数据库中检索数据。它完美地生成了 SQL Query,分别在 mySql 上进行了测试,并正确加载了记录;
但是,当使用 Criterial.list() 时,它给了我一个空列表。

我检查了我的数据库连接,它们都是正确的。什么会导致这个问题?


更新
这是我的代码:
accCr = DetachedCriteria.forClass(TSESpotInvestorAccount.class, "acc");
accCr.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY);
accCr.add(Restrictions.eq("exchangeDepositNo", filter.getBc()));
accCr.setProjection(Projections.id());
List accIds = getHibernateTemplate().findByCriteria(accCr);

【问题讨论】:

  • 是的,代码是必需的。
  • 刚刚更新了答案。

标签: java hibernate jakarta-ee criteria hibernate-criteria


【解决方案1】:

您的代码没有多大意义:

accCr.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY);

上面这行表明查询应该返回实体(可能有连接的实体),并且 Hibernate 应该只返回不同的实体

accCr.setProjection(Projections.id());

上面这行说查询必须只返回一个标量列:根实体的 ID。

如果你想要的是一个 ID 列表,那么不要设置不同的根实体结果转换器。

【讨论】:

  • 是的,我知道。这根本没有任何意义。谢谢你的提示,我会记住的。但问题不在于这个。
  • 那么要么查询实际上返回了一些东西,要么你没有在查询你认为的数据库,要么你没有在 MySQL 中提交数据,要么filter.getBc() 返回的值不是那个你认为是的。尝试删除此标准,然后打印它包含的内容。当心多余的空格或其他不可见的字符。
  • 感谢您的帮助,filter.getBc() 的末尾似乎有一些多余的字符,这导致了问题。但是,我学到了关于DISTINCT_ROOT_ENTITY 的一个很好的教训。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 2012-04-14
  • 2020-09-25
相关资源
最近更新 更多