Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在hibernate中编写条件ORDERBY子句条件?_Hibernate_Criteria - Fatal编程技术网

如何在hibernate中编写条件ORDERBY子句条件?

如何在hibernate中编写条件ORDERBY子句条件?,hibernate,criteria,Hibernate,Criteria,我需要在hibernate条件中转换以下查询 有人知道如何在hibernate中编写这个ORDERBY子句吗 select * from StudentMasterTable where SchoolId = 90 and SchoolName IS NOT NULL ORDER BY IIF(StudentType = 'O',StudentName,SchoolName) 我相信我这样做是为了处理动态orderBys: //制作一个方法,该方法将接受一个字符串,我想这是您的studentT

我需要在hibernate条件中转换以下查询

有人知道如何在hibernate中编写这个ORDERBY子句吗

select * from StudentMasterTable where SchoolId = 90 and SchoolName IS NOT NULL ORDER BY IIF(StudentType = 'O',StudentName,SchoolName)

我相信我这样做是为了处理动态orderBys:

//制作一个方法,该方法将接受一个字符串,我想这是您的studentType列(您可能应该为StudentMasterTable显示您的实体类,我假设studentType是字符串类型)

//然后做下面的事情

"select s from StudentMasterTable s where s.schoolId = '90' and s.schoolName is not    null
order by " +  orderByClause(s.studentType) + ",s.studentName,s.schoolName"; 

最后我找到了解决办法

我创建了一个自定义类来覆盖条件公式

public class customOrderBy extends Order {
    private String sqlFormula;


    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;
    }


    public static Order customOrder(String sqlFormula) {
        return new OrderBySqlFormula(sqlFormula);
    }
}
我把这个叫做下面

criteria.addOrder(customOrderBy.customOrder("IIF(StudentType = 'O',StudentName,SchoolName)"));

我在请求中没有StudentType,我需要通过检查表或bean中的数据来查找基于标准的解决方案
criteria.addOrder(customOrderBy.customOrder("IIF(StudentType = 'O',StudentName,SchoolName)"));