hibernate - 有条件的Grails

标签 hibernate grails gorm grails-domain-class

我想在Grails条件中将NVL函数用于orderBy子句。我应该怎么用?我尝试了多种方法。有人可以帮我吗?

SQL查询转换为Grails条件:
通过NVL(field1,field2)ASC选择* forom Domain_Table顺序

尝试的方法1:

Domain.createCriteria().list(max:10,offset:10){
   order(field1,'ASC')
   order(field2,'ASC')
}

工作正常,但是生成SQL查询就像
Select * forom Domain_Table order by field1 ASC,field2 ASC

不能满足我的要求

方法2:
 Domain.createCriteria().list(max:10,offset:10){
       order(nvl(field1,field2),'ASC')
    }

错误:Nvl不是域类的属性

方法3:
Domain.createCriteria().list(max:10,offset:10){
   projections{
  addProjectionToList(Projections.sqlProjection("nvl(field1,field2) as description", ['description'] as String[], [Hibernate.STRING] as Type[]), 'description'))
           order('description,'ASC')
        }

问题:
我正在根据确切的顺序得到记录。但是,我再次用描述打数据库以获得我不需要的域。
还有一个选项,我可以放入property(name,alias)作为响应。但是,我需要查询整个域。

请帮帮我。

最佳答案

您可以将@Formula用于Entity上的人工字段(我们将其命名为nvl),然后在订购时使用它。

或者您可以使用Order的自定义实现

public class OrderBySqlFormula extends Order {
    private String sqlFormula;

    /**
     * Constructor for Order.
     * @param sqlFormula an SQL formula that will be appended to the resulting SQL query
     */
    protected OrderBySqlFormula(String sqlFormula) {
        super(sqlFormula, true);
        this.sqlFormula = sqlFormula;
    }

    public String toString() {
        return sqlFormula;
    }

    public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
        return sqlFormula;
    }

    /**
     * Custom order
     *
     * @param sqlFormula an SQL formula that will be appended to the resulting SQL query
     * @return Order
     */
    public static Order sqlFormula(String sqlFormula) {
        return new OrderBySqlFormula(sqlFormula);
    }
}

并使用criteria.addOrder(OrderBySqlFormula.sqlFormula("(a + b) desc"));
从这里

http://blog.tremend.ro/2008/06/10/how-to-order-by-a-custom-sql-formulaexpression-when-using-hibernate-criteria-api/

关于hibernate - 有条件的Grails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33143446/

相关文章:

java - 无法创建事务 [Spring Boot + Hibernate]

grails - Groovy控制台无法 “remember”任何变量-总是说 “unknown property”

hibernate - Grails具有一个无所属关系

database - 如何在Grails中将外键映射为主键?

hibernate - Grails读取GORM映射

java - @GenerateValue 注解中生成器属性的意义

java - Hibernate中save()和update()有什么区别

java - 如何实现对简单对象集合的排序?

grails - 找不到Grails 1.3.7插件

hibernate - 如何将ID映射到Grails中的其他列?