简体   繁体   中英

How to do criteria queries for oracle

How to remake this code to work with oracle. Before that, it worked with Postgres and there were no errors. Now it gives sql grammatical error.

 public List<MyOrder> myOrderListNew(Company company){
        Criteria criteria = session.getCurrentSession().createCriteria(MyOrder.class);
        criteria.add(Restrictions.eq("company.id", company.getId()));
        criteria.add(Restrictions.eq("removeorder", false));
        criteria.add(Restrictions.eq("status", "new"));
        criteria.addOrder(Order.desc("id"));
        List<MyOrder> myOrders = criteria.list();
        return myOrders;
    }

about the : criteria.add (Restrictions.eq ("company.id", company.getId ()));

"company.id", here company this property in the entity class MyOrder.

StackTrace

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1013)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
    org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
    org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
    org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:69)




java.sql.SQLSyntaxErrorException: ORA-01747: invalid user.table.column, table.column, or column specification

    oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
    oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
    oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054)
    oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623)
    oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252)



Error : 1747, Position : 144, Sql = select this_.myOrder_id as myOrder_id1_6_0_, this_.myorder_company_id as myorder_company_id9_6_0_, this_.courier_id as courier_id10_6_0_, this_.date as date2_6_0_, this_.date_hms as date_hms3_6_0_, this_.hide as hide4_6_0_, this_.removeorder as removeorder5_6_0_, this_.selected as selected6_6_0_, this_.shops_id as shops_id11_6_0_, this_.status as status7_6_0_, this_.sum as sum8_6_0_ from myorder this_ where this_.myorder_company_id=:1  and this_.removeorder=:2  and this_.status=:3  order by this_.myOrder_id desc, OriginalSql = select this_.myOrder_id as myOrder_id1_6_0_, this_.myorder_company_id as myorder_company_id9_6_0_, this_.courier_id as courier_id10_6_0_, this_.date as date2_6_0_, this_.date_hms as date_hms3_6_0_, this_.hide as hide4_6_0_, this_.removeorder as removeorder5_6_0_, this_.selected as selected6_6_0_, this_.shops_id as shops_id11_6_0_, this_.status as status7_6_0_, this_.sum as sum8_6_0_ from myorder this_ where this_.myorder_company_id=? and this_.removeorder=? and this_.status=? order by this_.myOrder_id desc, Error Msg = ORA-01747: invalid user.table.column, table.column, or column specification

    oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498)
    oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
    oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054)
    oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623)
    oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252)
    oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:612)

Formatted, query you use is this. I've marked what seems to be wrong: column names can't be DATE nor SUM as these are reserved words (for a datatype and a function).

  SELECT this_.myOrder_id AS myOrder_id1_6_0_,
         this_.myorder_company_id AS myorder_company_id9_6_0_,
         this_.courier_id AS courier_id10_6_0_,
         this_.date AS date2_6_0_,                               --> this
         this_.date_hms AS date_hms3_6_0_,
         this_.hide AS hide4_6_0_,
         this_.removeorder AS removeorder5_6_0_,
         this_.selected AS selected6_6_0_,
         this_.shops_id AS shops_id11_6_0_,
         this_.status AS status7_6_0_,
         this_.SUM AS sum8_6_0_                                  --> this
    FROM myorder this_
   WHERE     this_.myorder_company_id = :1
         AND this_.removeorder = :2
         AND this_.status = :3
ORDER BY this_.myOrder_id DESC

What to do? Depends on table description. If you managed to create such a table, then you must have enclosed column names into double quotes. If that's so, you'll have to do the same every time you work with those columns, eg

SQL> create table myorder
  2    ("DATE"   date,
  3     "SUM"    number
  4    );

Table created.

SQL> -- this is what you are currently doing; see? The same ORA-01747 error
SQL> select this_.date,
  2         this_.sum
  3  from myorder this_;
select this_.date,
             *
ERROR at line 1:
ORA-01747: invalid user.table.column, table.column, or column specification

SQL> -- this is what you should be doing
SQL> select this_."DATE",
  2         this_."SUM"
  3  from myorder this_;

no rows selected

SQL>

If possible, change column names to make your life easier.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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