1

是否可以(使用 Hibernate 和 JPA2 Criteria Builder)按方法结果而不是实体成员进行排序?

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 块,不是吗?

4

2 回答 2

0

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

可能,我会使用 getResultList() 获得未排序的结果,然后手动对它们进行排序:

使您的 EvaluatedValue 成为实现 Comparable 的类型: 请参见此处

于 2010-10-04T15:17:05.067 回答
0

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

于 2010-06-07T16:51:35.090 回答