是否可以(使用Hibernate和JPA2 Criteria Builder [1])按方法的结果而不是实体的成员进行排序?
public class X { protected X() {} public String member; public String getEvaluatedValue() { // order by return "a status calculated with various members"; } }
我想要获得的是getEvaluatedValue()的结果。这可能吗?
先谢谢。
编辑:已添加回复。
我没有使用@Formular,但是
EntityManager em = ...; QueryBuilder builder = em.getQueryBuilder(); SomeQueryClass query = builder.createQuery(MyTargetClass.class); query.orderBy(builder.asc(... some code...));
我虽然它是普通的JPA2,当然你是对的,没有机会通过动态数据订购。但我可能会被允许使用if-else或任何语句(使用我的QueryBuilder定义)指定一些order-by块,不是吗?
[1] http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html_single/#querycriteria
答案 0 :(得分:0)
我不知道是否可能(如果一个属性是暂时的,即在数据库中没有表示,SQL结果应该是什么?)但是,更重要的是,排序之间的区别是什么{{ 1}}和"some test " + member
?也许这只是一个例子......
答案 1 :(得分:0)
看起来不可能,因为这个原因: 当在SQL层中运行查询时,不计算“EvaluatedValue”字段。它只是稍后填充(当确切地说,我不知道,它可能取决于实体是否使用LAZY模式)。 JPA Query对象与SQL密切相关,即数据库中的内容。
也许,我会使用getResultList()获取非排序结果,然后手动对它们进行排序:
使EvaluatedValue成为实现Comparable的类型: see here