示例数据库表:
- ID = 1,msgFrom = '你好',foobar = 'meh'
- ID = 2, msgFrom = '再见', foobar = '评论'
- ID = 3,msgFrom = '你好',foobar = '响应'
所需输出示例(由 hibernate 查询生成):
- 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/ http://oscarvalles.wordpress.com/2008/01/28/sql-distinct-on-one-column-only/
请尝试这个并让我知道
DetachedCriteria msgFromCriteria = DetachedCriteria.forClass(Message.class);
ProjectionList properties = Projections.projectionList();
properties.add(Projections.groupProperty("messageFrom"));
properties.add(Projections.min("id"),"id");
msgFromCriteria.setProjection(properties);
Criteria criteria = s.createCriteria(Message.class);
criteria.add(Subqueries.propertiesIn(new String[]{"messageFrom","id"},
msgFromCriteria));
List<Message> list = criteria.list();
for(Message message:list){
System.out.println(message.getId()
+"-------"
+message.getMessageFrom()
+"-----"
+message.getFoobar());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)