使用 JPA 和 Hibernate 将 Java 布尔值映射到 Oracle Number 列
Posted
技术标签:
【中文标题】使用 JPA 和 Hibernate 将 Java 布尔值映射到 Oracle Number 列【英文标题】:Mapping Java boolean to Oracle Number column with JPA and Hibernate 【发布时间】:2015-05-06 01:50:40 【问题描述】:我的模型中有一个这样创建的属性:
public class Client
private Boolean active;
我的 RDBMS 是 Oracle,active
列的类型是 NUMBER(1,0)
。
如何使用 Restrictions API 来实现以下功能?
criteria.add(Restrictions.eq("active"),object.isActive());
【问题讨论】:
【参考方案1】:Hibernate 自动将 Boolean
Java 类型映射到 Oracle NUMBER(1,0)
。
因此,您可以在实体映射、JPQL 或 Criteria 查询中使用 Boolean
值,并且生成的 SQL 将改用数据库 NUMBER(1,0)
格式。
【讨论】:
【参考方案2】:我不推荐使用布尔值,你应该使用布尔值来防止 NPE,因为布尔值只有两个可用值——真或假。布尔值的 null 是什么意思?当您需要包装器类型布尔时,这是一种罕见的情况。 Oracle - number(1) 默认 0 不为空。
【讨论】:
空布尔值可能意味着未知或未指定。并不是说你总是需要这种区别。 在这种情况下你应该使用 Enum,它适合这个。布尔值意味着真或假,仅此而已。如果你需要第三个状态 - 使用枚举。 对不起,“布尔”意味着真或假,仅此而已。 “布尔”表示真、假或未指定。就像“长”和“长”的区别 对于布尔类型应该如何处理未指定?如果某种东西的值超过 3 个,则绝对表明它应该是一个枚举。 如果该列可以为空,则使用布尔值。布尔值可以容纳第三种可能性,“未指定”。如果该列不可为空,则使用布尔值。可空列不是使用 Enum 的理由。以上是关于使用 JPA 和 Hibernate 将 Java 布尔值映射到 Oracle Number 列的主要内容,如果未能解决你的问题,请参考以下文章
将 Java UUID 存储在二进制数据库列中,Hibernate/JPA 与原始 JDBC
如何使用休眠将mysql与Java连接?例外:没有名为 org.hibernate.tutorial_jpa 的 EntityManager 的持久性提供程序 [关闭]