示例数据库表:
- ID = 1,msgFrom = '你好',foobar = 'meh'
- ID = 2,msgFrom = '再见',foobar = '评论'
- ID = 3,msgFrom = '你好',foobar = '响应'
示例所需的输出(由休眠查询生成):
- ID = 1,msgFrom = '你好',foobar = 'meh'
- ID = 2,msgFrom = '再见',foobar = '评论'
在上面的示例中,第三条记录将从结果中排除,因为 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/