2012-04-04 54 views
0

的错误,我得到:德比布尔/整型转换在JPQL

ERROR 42821: Columns of type 'BOOLEAN' cannot hold values of type 'INTEGER'. 

对于JPQL查询:

SELECT b.id FROM Bar b WHERE b.latest = true 

显然,因为Hibernate映射一个布尔字段(如“最新)到一个整数列对于JavaDB之外/德比,但这使用标准API时只发生在列JPQL进行访问。同样的结果。

休眠已被设置为org.hibernate.dialect.DerbyDi alect和驱动程序org.apache.derby.jdbc.EmbeddedDriver

其他版本的JDBC驱动程序的结果相同。

推测解决方法是将列映射到包含“Y”和“N”的单个字符。但我宁愿正确地做。

有没有人遇到过这个问题呢?

回答

1

传递true作为查询参数

SELECT b.id FROM Bar b WHERE b.latest = :latest 

将肯定工作。

0

也许你的Hibernate DerbyDialect并不完全匹配你的Derby版本。 Derby对BOOLEAN数据类型的处理改变了一些版本,我认为您必须确保客户端使用与BOOLEAN数据类型匹配的正确JDBC API。较早版本的Derby只支持INTEGER,而不支持BOOLEAN。

在你的问题中提供更多细节将是非常有价值的。请注意所涉及的所有软件包的准确版本,包括发生的错误消息的完整堆栈跟踪,并在发生错误时在程序中张贴精确位置的源代码片段。

+0

可能是这个改变在[10.8.1.2](https://db.apache.org/derby/releases/release-10.8.1.2.html#Overview)这是当前版本。 – oers 2012-04-04 14:32:34

+0

我试过最后三个版本:10.8.2.2,10.8.1.2和10.7.1.1。所有的嵌入式数据库。 – 2012-04-04 17:39:58