你的位置:首页 > Java教程

[Java教程]hibernate实体类属性应该使用int还是Integer


     我们知道,hibernate并没有强制要求pojo(实体类 )属性必须是基本数据类型或者是包装类,但是我们把属性声明为基本数据类型( primitive types directly)或者包装类 ( wrapping classes for primitives)对我们代码的编写有着深远的影响。
 

1,使用基本数据类型的好处

a),使用基本数据类型意味着你所定义的属性不允许为空,这样你在获取该属性的时候就不可能会得到一个null值。
b),int在java中占32/64 bits,而Integer占了16个字节,所以使用Integer在性能方面要比int差一些。
 

2,使用包装类的好处

a),当我们不想给这个属性设置任何值的时候,我们可以给它一个null值(前提是数据库的字段允许插入NULL)。
b),我们可以在pojo类中使用验证注解对属性的值做校验(例如: javax.validation.constraints.NotNull)
 

3,hibernate官方推荐的做法

下面引用自hibernate官方文档
Cat has a property called id. This property maps to the primary key column(s) of a database table. The property might have been called anything, and its type might have been any primitive type, any primitive "wrapper" type, java.lang.String or java.util.Date.
...
We recommend that you declare consistently-named identifier properties on persistent classes and that you use a nullable (i.e., non-primitive) type.
 
可以看出,hibernate是建议开发者使用包装类的。
 

4,两者在实际开发中的比较

a),如果你的数据库字段是允许为空的,使用包装类。如果不允许为空,使用包装的时候,如果你往数据库插入null值,此时就会抛出异常。然后你就可以对异常进行捕获并处理。
b),使用基本数据类型的时候,如果字段是NULL,那么JDBC会返回0,但是这里会有一个问题。有可能0在你的业务逻辑代表着特定含义,这时候就可能出现一些意想不到的后果。
 
 
总结:在项目中去使用包装类型而不是基本数据类型,这样可以使你编写代码更简单,除非有人给你一个更好的理由去使用基本数据类型或者你的上头要求一定要使用基本数据类型。