JPA2 + Hibernate + Order By

时间:2010-06-07 12:50:00

标签: hibernate jpa-2.0 hibernate-entitymanager

是否可以(使用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

2 个答案:

答案 0 :(得分:0)

我不知道是否可能(如果一个属性是暂时的,即在数据库中没有表示,SQL结果应该是什么?)但是,更重要的是,排序之间的区别是什么{{ 1}}和"some test " + member?也许这只是一个例子......

答案 1 :(得分:0)

看起来不可能,因为这个原因: 当在SQL层中运行查询时,不计算“EvaluatedValue”字段。它只是稍后填充(当确切地说,我不知道,它可能取决于实体是否使用LAZY模式)。 JPA Query对象与SQL密切相关,即数据库中的内容。

也许,我会使用getResultList()获取非排序结果,然后手动对它们进行排序:

使EvaluatedValue成为实现Comparable的类型: see here