Oracle遇到了hibernate生成的查询问题,在行num中使用_生成查询

时间:2018-03-20 19:13:48

标签: oracle hibernate-criteria

我正在使用hibernate并使用条件查询,数据库是Oracle。以下是生成的查询。

WITH query AS (
      SELECT inner_query.*, 
             ROW_NUMBER() OVER (ORDER BY CURRENT_TIMESTAMP) as __hibernate_row_nr__ 
      FROM ( 
           select this_.MODIFIEDTIME as MODIFIED1_1_1_, 
                  this_.FIELDNAME as FIELDNAM2_1_1_, 
                  this_.EMPNBR as EMPNBR3_1_1_
           from EMPLOYEEAUDIT this_ 
           left outer join EMPLOYEE employee2_ on this_.EMPNBR=employee2_.EMPNBR 
       ) inner_query 
) 
SELECT MODIFIED1_1_1_,FIELDNAM2_1_1_,EMPNBR3_1_1_
FROM query WHERE __hibernate_row_nr__ >= 1 
 AND __hibernate_row_nr__ < 10;"

抛出以下错误: - SQL错误:911,SQLState:22019 ORA-00911:无效字符

但是,如果我使用SQL查询并使用hibernate_row_nr__重新生成 hibernate_row_nr 并在DbVisualizer中运行它可以正常工作。似乎Oracle无法将'_'视为有效字符。如何解决这个问题?

以下是我的java代码: -

public List<Employee> getEmployeeList(int start, int limit, AgSort sorter) throws UIFilterException {

    DetachedCriteria detached = getEmployeeListCriteria(sorter, filters);

    return (List<DealSetupAudit>) hibernateTemplate.findByCriteria(detached, start, limit);
}

    private DetachedCriteria getEmployeeListCriteria(AgSort sorter) throws UIFilterException {
    DetachedCriteria detached = getBaseCriteria(DealSetupAudit.class, sorter);


    return detached;
}

protected <T> DetachedCriteria getBaseCriteria(Class<T> genericType, AgSort sorter) throws UIFilterException {

    DetachedCriteria criteria = DetachedCriteria.forClass(genericType);

    addSorter(criteria, sorter);
    return criteria;
}
    protected void addSorter(DetachedCriteria criteria, AgSort sort) {

    if (sort != null) {
        Order order = null;
        if (sort.getDir().equalsIgnoreCase(Constants.DESC)) {
            order = Order.desc(sort.getColumn());
        } else {
            order = Order.asc(sort.getColumn());
        }
        criteria.addOrder(order);
    }
}

我正在使用Hibernate4,下面是我的application.properties: -

oracle.datasource.driver-class-name=oracle.jdbc.OracleDriver
oracle.datasource.url=******
oracle.datasource.username=*****
oracle.datasource.password=*****
oracle.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect

oracle.jpa.properties.hibernate.dialect = org.hibernate.dialect.Oracle10gDialect

1 个答案:

答案 0 :(得分:0)

双引号?通常真的,真的坏主意。我建议你避免使用有效的列名/别名。

SQL> select dname _invalid_alias_
  2  from dept
  3  where deptno = 10;
select dname _invalid_alias_
             *
ERROR at line 1:
ORA-00911: invalid character


SQL> select dname "_valid_alias_"
  2  from dept
  3  where deptno = 10;

_valid_alias_
--------------
ACCOUNTING

SQL>