1
1
另一个选择是使用@formula注释,它基本上相当于创建一个嵌套的select,这样您就可以获得您的计数。 在有问题的DB对象属性/成员(应该创建)上,向getter添加注释,如下所示: @公式(“(select count(table_name.id)from table where whatever…)” 公共长GetNewProperty{ 返还新财产; } 然后直接以成员为目标获取您的计数值… 注意:请注意,在公式批注中指定SQL时,当Hibernate处理当前对象表(this)时,必须直接指定字段名。因此,在WHERE子句中,当引用我怀疑是usergroup的当前对象表时,只需使用id或其本身的任何内容。 为了使Hibernate工作并防止编译器抱怨,我必须为新属性设置一个setter。 可能还有其他使用@formula的聪明方法,但我对这个还比较陌生,而且似乎没有太多关于这个主题的文档… 如果您以前从未使用过嵌套的select,那么您可以先在SQL中重新创建它——这对我有帮助。 希望这有帮助 |
2
3
默认情况下,不可能使用CiteriaAPI,但您可以扩展org.hibernate.criteria.order类。 本文将介绍如何扩展该类: http://blog.tremend.ro/2008/06/10/how-to-order-by-a-custom-sql-formulaexpression-when-using-hibernate-criteria-api 我的解决办法是:
Tosqlstring方法基于org.hibernate.criteria.sizeexpression类。(来源: http://javasourcecode.org/html/open-source/hibernate/hibernate-3.6.0.Final/org/hibernate/criterion/SizeExpression.java.html ) 示例用法:
这将列出按成员大小升序排列的用户组,其中“成员”是用户组实体中的用户集合。 |
3
0
您可以这样做,方法是在实体上定义一个“派生属性”,它将是一个只读属性,返回实体内部集合的大小。定义派生属性的最简单方法是 documented here :
一旦定义了属性,您就应该能够将属性名作为条件API中的ORDER子句使用,就像任何其他属性一样。不过,我自己也没试过。 如果它可以工作,那么它很可能是作为内存排序完成的,因为它将无法将其映射到SQL。如果这是一个问题,那么上面的相同链接将说明如何使用自定义SQL片段实现派生属性:
|
Nitek · JPA构造正在查找错误的构造函数 8 年前 |
javahippie · JPA-在where子句中使用“复合值”查询 8 年前 |
Mr.Radar · JPA 2标准生成器无关系加入 10 年前 |