【发布时间】:2011-09-21 21:19:37
【问题描述】:
在我工作的公司中,我们主要讨论是否应该更好地为基元(java.lang.Integer、java.lang.Long)使用包装类,还是直接在在 Hibernate 中将实体映射到表的 POJO。
我们的想法是我们希望这些值在数据库中不为空。
支持使用原语的论据:
- 将这些值作为 int 处理意味着它们永远不能为空,在 这样就不可能无意中获得空引用 在场上。
- int=32/64 位内存。整数 = 16 字节内存 而且速度也较慢
支持使用包装对象的论据:
- 我们可以在数据库级别添加一个约束来始终防止 null 到达那里的价值
- 我们最终可能会得到误导性数据,我们可以 每当用户没有时,数据库中有 0 而不是空值 设置一个值和错误的数据是一个棘手的问题。
- 对象比基元具有更强的表现力。我们有空值,还有 整数值,因此我们可以使用注释更轻松地验证它们 示例 (javax.validation.constraints.NotNull)。
【问题讨论】:
-
您可以在不使用 JSR303 的情况下使用 hibernate 完成所有这些工作。虽然 JSR303 非常棒且向前迈进了一步,但 JSR303 有局限性,但 hibernate 可以解决这个问题。如果您使用 Wrappers,您将遇到很多问题并且当你有这么多 getIntValue 和 Parse 等语句时,代码最后会看起来很脏。不要使用包装器。
标签: java hibernate pojo primitive-types