【问题标题】:MySQL mapping null boolean to Java with HibernateMySQL 使用 Hibernate 将 null 布尔值映射到 Java
【发布时间】:2016-07-20 14:58:18
【问题描述】:

我正在使用 Spring 和 Hibernate 使用 Java 和 MySql 开发 Bet 服务,但我有一个关于映射的问题:

在我的数据库中,我有bet types(问题),例如:¿谁会赢得比赛?和bet options 用于每种类型,例如:1、X、2。每个选项都有一个布尔指示器来显示选项是否是赢家选项。因此,MySql 中该属性的映射是这样的布尔值:1 如果选项是赢家,0 如果选项更宽松,null 如果选项既不是赢家也不是更宽松

那么,在我的服务层中,如何检查选项中的获胜者属性是否为空?我试过option.getIsWinner() != null,但 boolean 是一种原始类型,所以它可以为空。对此有什么想法吗?

谢谢。

【问题讨论】:

    标签: java mysql hibernate null boolean


    【解决方案1】:

    Java 有两种布尔类型;小写-b boolean,这是一个原语,一个是大写-B Boolean,这是一个对象。对象变体也可以为空,因此如果数据库列为空,它应该可以为空。如果您切换到java.lang.Boolean,您应该会得到您期望的行为。我刚刚查看了 Hibernate 文档,它支持两者。

    【讨论】:

    • 您好,感谢您的回答。所以我需要在我的getter中指定@Type(type="java.lang.Boolean")注解,以便在Hibernate中从数据库中获取布尔类型?
    • 我认为您不需要@Type 声明,但您需要将变量的类型从(例如)private boolean option 更改为private Boolean option。您与该属性的交互也会产生一些副作用 - 一方面,您需要检查空值。
    • 来自文档:“@org.hibernate.annotations.Type 覆盖了使用的默认休眠类型:这通常不是必需的,因为类型是由 Hibernate 正确推断的。请参阅 Hibernate 参考指南有关 Hibernate 类型的更多信息。”
    猜你喜欢
    • 2014-01-16
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2017-09-07
    • 2020-12-13
    相关资源
    最近更新 更多