使用hibernate 5.2和postgreSQL 42.2,我们会收到此错误:
由以下原因引起:org.postgresql.util.PSQLException:FEHLER:运算符 存在nicht:数字=布尔值Hinweis:Kein运算符刺激 dem angegebenen Namen和den Argumenttypenüberein。西蒙森 奥地利Typhuwandlungenhinzufü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();
答案 0 :(得分:-1)
最佳解决方案:
使用类似查询参数
query = session.createQuery("from " + TestUser.class.getName() + " where
abool=:myboolean");
query.setBoolean( "myboolean", boolValue);
巨大代码库的解决方案: 创建自己的方言类:
public class PostgreSQL9DialectParcIT
extends PostgreSQL9Dialect {
public String toBooleanValueString(boolean bool) {
return bool ? "1" : "0"; //$NON-NLS-1$//$NON-NLS-2$
}