【发布时间】:2012-08-10 05:35:36
【问题描述】:
示例数据库表:
- ID = 1,msgFrom = 'Hello',foobar = 'meh'
- ID = 2,msgFrom = '再见',foobar = 'cmets'
- ID = 3,msgFrom = 'Hello',foobar = 'response'
所需输出示例(由休眠查询生成):
- ID = 1,msgFrom = 'Hello',foobar = 'meh'
- ID = 2,msgFrom = '再见',foobar = 'cmets'
在上面的示例中,第三条记录将从结果中排除,因为 msgFrom 列是相同的。假设 Java/Hibernate 类称为 Message。我希望将结果作为 Message 对象列表(或无论如何都可以转换为 Message 的对象)返回。如果可能,我想使用 Criteria API。我在 SO 上看到了这个例子,它看起来很相似,但我还不能正确实现它。
select e from Message e
where e.msgFrom IN (select distinct m.msgFrom
from Message m
WHERE m.msgTo = ?
AND m.msgCheck = 0");
我这样做的原因是在数据库上过滤不同的记录,所以我对必须过滤应用程序服务器上的任何内容的答案不感兴趣。
编辑:文章基本上显示了我想要做什么。 http://oscarvalles.wordpress.com/2008/01/28/sql-distinct-on-one-column-only/
【问题讨论】:
-
可能是stackoverflow.com/questions/5196243/… 会有帮助吗?
-
@aishwarya 我已经看到了。那篇文章结合了两列并使其与众不同。不是我想要做的。
-
@KyleM,当然,我的意思是你试过设置投影
Projections.distinct(Projections.property("id.msgFrom"))吗? -
id 是在哪里声明的?这个怎么样......如果你知道你想让我尝试什么,发布一个答案,我会尝试你给我的确切语法。
-
@aishwarya 这不是因为我很懒惰。我不明白你为什么要暗示你是什么。在您的示例中,“id”是什么?是在哪里宣布的?如果您发布回复并澄清您建议我尝试的内容,以及为什么...,这可能会更容易
标签: java hibernate criteria-api