gpt4 book ai didi

hibernate sql 查询没有正确映射 bool 值?

转载 作者:行者123 更新时间:2023-11-29 11:35:33 25 4
gpt4 key购买 nike

通过任何 SQL 客户端运行以下命令

SELECT FALSE, TRUE;

返回

f, t

但是这个 SQL 查询:

SQLQuery qry = session.createSQLQuery("SELECT FALSE, TRUE;");
Object[] result = (Object[]) qry.uniqueResult();

返回一个包含两个 bool 对象的对象数组:

[false, false]

我正在使用带 hibernate 功能的 postgres 9.0-801.jdbc4。

如何通过 hibernate sql 查询返回适当的 bool 值?

最佳答案

尝试更改映射文件中 bool 属性的定义:

<property name="someBoolean" column="SOME_COLUMN" type="true_false"></property>

或者如果你使用注释添加这个:

@Type(type="true_false")

这应该有所帮助,因为默认情况下,hibernate 将 bool 属性映射为 BIT 而不是 CHAR(1),我认为这就是您遇到此类问题的原因。 (查看 hibernate mapping types )。

编辑:

如果您需要使用 SQLQuery 选择 bool 值(作为分隔值而不是实体字段),您可以使用这样的方法:

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 使用 bool 值作为 1/0)。

Hibernate 使用三种 bool 格式:

1) "Y/N"-> CHAR(1) ansi sql 类型 -> "yes_no"hibernate 类型 -> YesNoType 类;

2) "T/F"-> CHAR(1) -> "true_false" hibernate 类型 -> TrueFalseType 类;

3) "1/0"-> BIT ansi sql 类型 -> "boolean"hibernate 类型 -> BooleanType 类;

因此您需要为您的数据库选择正确的类型(据我所知,正如我在示例中所写,您应该使用 TrueFalseType)。

关于hibernate sql 查询没有正确映射 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11813760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com