gpt4 book ai didi

java - Hibernate Criteria——返回列不同的记录

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:33 26 4
gpt4 key购买 nike

示例数据库表:

  1. ID = 1, msgFrom = '你好', foobar = 'meh'
  2. ID = 2, msgFrom = '再见', foobar = '评论'
  3. ID = 3, msgFrom = '你好', foobar = '回复'

所需输出示例(由 hibernate 查询生成):

  1. ID = 1, msgFrom = '你好', foobar = 'meh'
  2. 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/

最佳答案

请试试这个,让我知道

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());
}

关于java - Hibernate Criteria——返回列不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11943633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com