0

我得到的错误:

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”的单个字符。但我宁愿做得好。

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

4

2 回答 2

1

将 true 作为查询参数传递

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

肯定会工作。

于 2012-06-11T11:06:29.963 回答
0

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

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

于 2012-04-04T14:20:02.460 回答