繁体   English   中英

Hibernate标准:如何通过两列连接排序?

[英]Hibernate criteria: how to order by two columns concatenated?

我有一个Person表,它有两列:first_name和last_name。 Person类有两个相应的字段:firstName和lastName。 现在我正在使用条件api并尝试基于连接的这两列创建订单。 可能吗? 或者它只能通过hql实现?

这是JBoss hibernate站点的一个例子:

from DomesticCat cat order by cat.name asc, cat.weight desc, cat.birthdate

或者从同一个网站,为Criteria api

List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%")
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.setMaxResults(50)
.list();

他们似乎非常喜欢JBoss的猫。

我有相同的问题和标准api orderBy方法将无法使用连接列。 我需要将它与criteriaBuilder.construct()方法一起使用。 我通过扩展Orale10gDialect类并注册自定义函数来解决这个问题:

import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.type.StandardBasicTypes;

public class CustomOracle10gDialect extends Oracle10gDialect {

    public CustomOracle10gDialect() {
        super();

        // This must be used due to bug in Hibernate (orderBy won't work with concat)
        registerFunction("concatwithspace", new SQLFunctionTemplate(StandardBasicTypes.STRING, "?1 || ' ' || ?2"));
    }

}

然后:

Expression<String> user = cb.function("concatwithspace", String.class, criteriaRoot.get("firstname"), criteriaRoot.get("lastname")); 

...

criteriaQuery.orderBy(cb.asc(user));

当然,您还必须选择此连锁列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM