使用 Hibernate 和 Criteria 选择最常见的值
给定一个表,假设:
orderId | typeId
----------------
1 | 1
2 | 1
3 | 2
4 | 5
5 | 1
6 | 2
我有一个 Order
对象,它有一个 Type
对象(Type
有一个 Set
另一个方向的 Order
数,
我将如何使用来检索 Order
中最流行的 Type
(在本例中为类型 1)。 Hibernate 的 Criteria API?
Given a table, say:
orderId | typeId
----------------
1 | 1
2 | 1
3 | 2
4 | 5
5 | 1
6 | 2
And I have an Order
object which has a Type
object (Type
has a Set
of Order
s in the other direction.
How would I go about retrieving the most popular Type
of Order
(in this case, type 1) using Hibernate's Criteria API?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(2)
々眼睛长脚气2024-11-13 20:41:45
你可能想看看投影。您应该能够使用 Projections.groupProperty( ) 在“类型”关联上,并将结果相加。
检查这个SO问题: Hibernate criteria中的表达式
编辑:尝试过以下似乎工作正常:
订单:
@Entity
@Table(name="orders")
public class Order {
@Id
@GeneratedValue
private long id;
@ManyToOne
private Type type;
}
类型:
@Entity
@Table(name="order_types")
public class Type {
@Id
@GeneratedValue
private long id;
}
和标准:
Criteria c=sess.createCriteria(Order.class)
.createCriteria("type")
.setProjection(
Projections.projectionList()
.add(Projections.groupProperty("id"))
.add(Projections.rowCount(),"rowcount")
)
.addOrder(org.hibernate.criterion.Order.desc("rowcount"));
for (Object[] result:(List<Object[]>) c.list()){
System.out.println("type id: " + result[0] + "\tcount: " + result[1]);
}
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我查看了 Hibernate Criteria API 的文档,你能做这样的事情吗:
这可能需要修改才能使用正确的类
I took a look at the documentation of the Hibernate Criteria API, could you do something like this:
This may need modified to work with the proper classes