Как сделать критерии запросов для оракула - PullRequest
2 голосов
/ 26 марта 2019

Как переделать этот код для работы с оракулом. До этого он работал с Postgres и ошибок не было. Теперь это дает sql грамматическую ошибку.

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

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

"company.id", здесь company это свойство в классе сущности 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)

1 Ответ

1 голос
/ 26 марта 2019

Отформатирован, запрос, который вы используете это. Я отметил, что кажется неправильным: имена столбцов не могут быть DATE или SUM, поскольку это зарезервированные слова (для типа данных и функции).

  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

Что делать? Зависит от описания таблицы. Если вам удалось создать такую ​​таблицу, то вы должны заключить имена столбцов в двойные кавычки. Если это так, вам придется делать то же самое каждый раз, когда вы работаете с этими столбцами, например,

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>

Если возможно, измените имена столбцов, чтобы облегчить себе жизнь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...