【发布时间】:2018-12-12 12:56:24
【问题描述】:
使用 hibernate 5.2 和 postgreSQL 42.2 我们得到这个错误:
原因:org.postgresql.util.PSQLException: FEHLER: Operator exists nicht: numeric = boolean Hinweis: Kein Operator stimmt mit dem angegebenen Namen und den Argumenttypen überein。西米森 möglicherweise ausdrückliche Typumwandlungen hinzufügen。位置: 559 在 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440) ~[postgresql-42.2.4.jar:42.2.4] 在 org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2183) ~[postgresql-42.2.4.jar:42.2.4] 在 org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:308) ~[postgresql-42.2.4.jar:42.2.4] 在 org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441) ~[postgresql-42.2.4.jar:42.2.4] 在 org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365) ~[postgresql-42.2.4.jar:42.2.4] 在 org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:150) ~[postgresql-42.2.4.jar:42.2.4] 在 org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:113) ~[postgresql-42.2.4.jar:42.2.4] 在 com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:353) ~[c3p0-0.9.5.2.jar:0.9.5.2] 在 org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.Loader.getResultSet(Loader.java:2167) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1930) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1892) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.Loader.doQuery(Loader.java:937) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.Loader.doList(Loader.java:2689) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.Loader.doList(Loader.java:2672) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2506) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.Loader.list(Loader.java:2501) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:395) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final] 在 org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220) ~[hibernate-core-5.3.4.Final-pit2.jar:5.3.4.Final]
映射如下:
<id name="id" column="id" type="long">
<generator class="assigned"/>
</id>
<property name="abool" type="java.lang.Boolean" column="abool" />
查询如下:
session.createQuery("from " + TestUser.class.getName() + " where
abool=true").list();
【问题讨论】:
-
你试过
where abool is :mybool吗? Postgres 是一种使用IS语法的坚持者,因为 MySQL 很乐意接受=,这样人们就不必根据数据重写他们的查询。 -
我们必须使用几个 dbms,例如 DB2、Oracle、MS-SQL-Server。上面的查询适用于所有这些。因此,在我们的案例中,不需要更改单个查询的解决方案会更好。
-
"abool is :myboolean" and query.setBoolean("myboolean", boolValue);也可以!
标签: postgresql hibernate