![](/img/trans.png)
[英]Converting from Integer wrapper class to int primitive class
[英]Using wrapper Integer class or int primitive in hibernate mapping
在我工作的公司中,我们有一个关于是否应该更好地使用基元的包装类(java.lang.Integer,java.lang.Long)或是否直接在映射的POJO中使用基元类型的讨论Hibernate中表的实体。
我们的想法是,我们希望这些值在数据库中不为空。
支持使用原语的论据:
支持使用包装器对象的参数:
使用包装纸,让您的生活变得简单。
您的数据模型应该指明这一点。 无论如何,您应该在数据库中强制执行可空性。
如果它们在数据库中可以为空,那么使用包装器。 如果它们不可为空,并且您使用包装器,那么如果您尝试将null插入数据库,则会出现异常。
如果您的数据模型没有规定它,那么请选择约定,始终使用包装器。 这样人们就不必思考,或者确定值为0意味着为空。
我还会查询你的断言,它会降低性能。 你测量过这个吗? 我的意思是真的测量过吗? 当您与数据库通信时,除了16位和32位之间的差异外,还有很多考虑因素。
只需使用简单,一致的解决方案。 使用包装随处可见,除非有人给你一个很好的理由(准确的测量统计)不这样做。
以为应该提到:
使用持久化类中的非原始属性的Hibernate建议(第4.1.2节)实际上指的是 - 标题为 - 标识符属性 :
4.1.2。 提供标识符属性
Cat有一个名为id的属性。 此属性映射到数据库表的主键列。 该属性可能已被调用,其类型可能是任何基本类型,任何原始“包装”类型,java.lang.String或java.util.Date。
...
我们建议您在持久化类上声明一致命名的标识符属性,并使用可空(即非原始)类型。
尽管如此,原语的优势并不强烈:
Hibernate文档 (我碰巧找到的第一个版本)声明:
该属性可能已被调用,其类型可能是任何基本类型,任何原始“包装”类型,java.lang.String或java.util.Date。
...
我们建议您在持久化类上声明一致命名的标识符属性,并使用可空(即非原始)类型。
所以“专家的声音”建议使用Integer
/ Long
......但是没有描述为什么会出现这种情况。
我想知道是否可以创建一个尚未持久化的对象而没有标识符(即属性值为null
),将其与持久化实体区分开来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.