JPQL中的Derby布尔/整数转换

时间:2012-04-04 09:28:46

标签: hibernate derby jpql javadb

我得到的错误:

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 / Derby的整数列。但这只发生在使用JPQL访问列时。使用Criteria API时的结果相同。

Hibernate已设置为 org.hibernate.dialect.DerbyDialect ,驱动程序 org.apache.derby.jdbc.EmbeddedDriver

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

据推测,解决方法是将列映射到包含“Y”和“N”的单个字符。但我宁愿做得恰到好处。

是否有人遇到过这个问题?

2 个答案:

答案 0 :(得分:1)

将true作为查询参数传递

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

肯定会有用。

答案 1 :(得分:0)

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

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