2013-03-03 87 views
1

准则用于从数据库检索数据。它完美地生成SQL查询,分别在mySql上进行测试,记录加载正确;
但是,使用Criterial.list()时,它给了我一个空的列表。准则会正确生成SQL查询,但不会返回任何内容

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


修订
这里是我的代码:

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); 
+0

是的,代码是必要的。 – 2013-03-03 08:50:35

+0

刚刚更新了答案。 – 2013-03-03 08:54:21

回答

0

您的代码并没有太大的意义:

accCr.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY); 

上面一行说,查询应该返回实体(有潜在的联合实体),并且Hibernate应该只返回不同的实体

accCr.setProjection(Projections.id()); 

上面的行表示查询只能返回一个标量列:根实体的ID。

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

+0

是的,我知道。它根本没有任何意义。感谢您的提示,我会记住这一点。但问题不在于此。 – 2013-03-03 09:06:43

+0

然后或者查询实际返回一些东西,或者你没有查询你想的数据库,或者你没有在MySQL中提交数据,或者'filter.getBc()'返回的值不是你认为的那个是。尝试删除此标准,然后打印它包含的内容。注意多余的空格或其他不可见的字符。 – 2013-03-03 09:10:55

+0

感谢您的帮助,看起来'filter.getBc()'末尾有一些额外的字符,导致了这个问题。不过,我学到了一个关于DISTINCT_ROOT_ENTITY的好教训。 – 2013-03-03 12:56:13

相关问题