Hibernate SQLQuery(主机变量的值不够)

时间:2013-01-07 08:12:32

标签: java hibernate sqlanywhere

我们将Hibernate与Sybase Anywhere 12一起使用,并且在使用SQLQuery的视图查询时遇到问题。

SQLQuery query = session.createSQLQuery(" SELECT * FROM myview WHERE x = :x AND y IN (:y) ");
query.setParameter("x", "z1234");
query.setParameterList("y", Arrays.asList(1, 2, 3, 4));
query.setReadOnly(true);
query.addEntity(ClassX.class);
List result = query.list();

重新启动数据库后,查询失败,一次。如果我们第二次使用相同的参数执行相同的查询,它就会顺利运行。

该视图基于一个表和另一个基于两个表的视图。这些表确实有触发器。以防万一这可能是我们问题的根源,但是因为我调试了Connection#prepareStatement(...) SQLException所在的地方,所以我没有看到它。

Caused by: java.sql.SQLException: [Sybase][JDBC Driver][SQL Anywhere]Not enough values for host variables
        at sybase.jdbc4.sqlanywhere.IConnection.nativePrepareStatement(Native Method) ~[sajdbc4.jar:na]
        at sybase.jdbc4.sqlanywhere.IConnection.prepareStatement(IConnection.java:599) ~[sajdbc4.jar:na]
        at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_09]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_09]
        at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:125) ~[com.springsource.org.apache.tomcat.jdbc-1.1.0.1.jar:na]
        at $Proxy104.prepareStatement(Unknown Source) ~[na:na]
        at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]

有什么想法吗?


10:16:33.851 WARN  [http-9443-2] org.hibernate.util.JDBCExceptionReporter.logExceptions[233] - SQL Error: -188, SQLState: 07002
10:16:33.851 ERROR [http-9443-2] org.hibernate.util.JDBCExceptionReporter.logExceptions[234] - [Sybase][JDBC Driver][SQL Anywhere]Nicht genügend Werte für Hostvariablen

参考文献:Sybase Docs

1 个答案:

答案 0 :(得分:0)

我想我找到了问题的根源。 myview在Sybase Central中确实有一个警告符号。 myview基于另一个被删除并再次创建的视图。因此,myview需要重新编译。

但是,抛出的SQLException的SQL代码是错误的,并导致找到问题根源的错误方向。 Connection#prepareStatement(sqlQuery)未传递任何参数。