尝试在映射文件中更改布尔属性的定义:
<property name="someBoolean" column="SOME_COLUMN" type="true_false"></property>
或者如果您使用注释添加这个:
@Type(type="true_false")
这应该会有所帮助,因为默认情况下休眠将布尔属性映射为 BIT 而不是 CHAR(1),我认为这就是您遇到此类问题的原因。(查看休眠映射类型)。
编辑:
如果您需要使用 SQLQuery 选择布尔值(作为分隔值而不是实体字段),您可以使用这种方法:
SQLQuery q = session.createSQLQuery("SELECT FALSE a, TRUE b;");
q.addScalar("a", new TrueFalseType());
q.addScalar("b", new TrueFalseType());
Object[] result = (Object[]) q.uniqueResult();
正如您在这种情况下看到的,您需要显式定义获取值的类型,以便 hibernate 可以正确转换它。我在 MySQL 中测试了这种方法并且一切正常(除了在我的情况下我指定类型BooleanType()因为 MySQL 使用布尔值作为 1/0)。
Hibernate 使用三种布尔格式:
1) “Y/N” -> CHAR(1) ansi sql 类型 -> “yes_no” 休眠类型 -> YesNoType 类;
2) "T/F" -> CHAR(1) -> "true_false" 休眠类型 -> TrueFalseType 类;
3)“1/0”->BIT ansi sql类型->“boolean”休眠类型->BooleanType类;
因此,您需要为您的数据库选择正确的类型(据我了解,正如我在示例中所写,您应该使用TrueFalseType)。