【问题标题】:Hibernate IN clause showing errorHibernate IN 子句显示错误
【发布时间】:2013-04-08 12:01:18
【问题描述】:

我必须在 IN 子句中添加一个字符串数组。

我的休眠查询如下所示,

                Query q = 
                    session.createQuery("from CsePrcsngGroup where CSE_SID=? and CSE_GROUP IN(:cseGrpLists)");
                q.setParameter(0, cseSid);
                q.setParameterList("cseGrpLists", cseGrpLists);
                return q.list();

其中 CsePrcsngGroup 是我的实体类。 CSE_SID 和 CSE_GROUP 是字段名称,cseGrpLists 是字符串数组。

我在执行时得到了这个异常,

Caused by: java.sql.SQLException: ORA-00942: table or view does not exist

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:138)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:316)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:282)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:639)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:185)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_for_describe(T4CPreparedStatement.java:503)
    at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:1029)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:535)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1126)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3001)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3043)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1849)
    at org.hibernate.loader.Loader.doQuery(Loader.java:718)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
    at org.hibernate.loader.Loader.doList(Loader.java:2294)
    ... 55 more

Wrapped exception:
org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.loader.Loader.doList(Loader.java:2297)

有什么建议吗?我尝试使用实体名称代替 DB 列名称,但得到相同的错误。原因是:java.sql.SQLException:ORA-00942:表或视图不存在

【问题讨论】:

  • 你怎么说IN子句中的错误
  • 开启日志并检查休眠创建的SQL。使用一些 DBMS 在相同的连接设置上运行查询。 ORA-00942 被抛出,因为您无权访问 Oracle 对象。所以问题是查询输出或权限。

标签: java hibernate hql hibernate-mapping


【解决方案1】:

在查询中使用属性名而不是列名。

Query q = session.createQuery("from CsePrcsngGroup where property1=? and property2 IN(:cseGrpLists)");

like 而不是'CSE_SID' 使用他的属性名称映射到此列(ex: id)

【讨论】:

  • 引起:java.sql.SQLException:ORA-00942:表或视图不存在
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 2014-09-10
  • 2021-05-15
  • 2015-04-19
  • 1970-01-01
相关资源
最近更新 更多