Hibernate JPQL中的Derby布尔/整数转换
我得到的错误是:Hibernate JPQL中的Derby布尔/整数转换,hibernate,derby,jpql,javadb,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将一个布尔字段(即“latest”)映射到JavaDB/Derby的一个整数列。但这只在JPQL中访问该列时发生。使用Criteria API时会得到相同的结果 Hibernate已设置
ERROR 42821: Columns of type 'BOOLEAN' cannot hold values of type 'INTEGER'.
对于JPQL查询:
SELECT b.id FROM Bar b WHERE b.latest = true
显然是因为Hibernate将一个布尔字段(即“latest”)映射到JavaDB/Derby的一个整数列。但这只在JPQL中访问该列时发生。使用Criteria API时会得到相同的结果
Hibernate已设置为org.Hibernate.dialent.derbydialent,对于驱动程序org.apache.derby.jdbc.EmbeddedDriver
对于其他版本的JDBC驱动程序,结果相同
大概解决方法是将列映射到包含“Y”和“N”的单个字符。但我更愿意正确地执行此操作
有人也遇到过这个问题吗?也许您的Hibernate Derby方言与您的Derby版本不完全匹配。Derby对布尔数据类型的处理更改了几个版本,我认为您必须确保客户端使用与布尔数据类型匹配的正确JDBC API。旧版本的Derby仅支持整数,不支持布尔值
在你的问题中提供更多的细节将是非常有价值的。请注意所涉及的所有软件包的精确版本,包括发生错误消息的完整堆栈跟踪,并在程序中出现错误的确切位置发布源代码片段。将true作为查询参数传递
SELECT b.id FROM Bar b WHERE b.latest = :latest
肯定会有用。可能是此更改是在当前版本中进行的。我已经尝试了最后三个版本:10.8.2.2、10.8.1.2和10.7.1.1。所有这些版本都使用嵌入式数据库。