<property name="pwdRetryCount" type="java.lang.Integer">
<column name="pwd_retry_count" />
</property>
和
<property name="pwdRetryCount" type="int">
<column name="pwd_retry_count" />
</property>
它们只有在处理空值时才有明显的区别。
这是因为int
是不能赋null的原始数据类型,而java.lang.Integer
是int
的包装类,可以接受null。
因此,如果pwd_retry_count
列是可空的,并且您使用int
来映射您的实体对象,对于pwd_retry_count
为空的记录,发生错误,因为int
不能存储空。
上面的答案完全正确,我只是输入了额外的信息。
为可选值使用可空类型(如Integer, Double等盒装基本类型)。这取决于您的模型,如果特定值是可选的有意义。如果它必须有默认值,你可以创建@PreX回调(例如@PreLoad)或重写getter来返回具有默认值的基本类型。
为需要的值使用基本类型。如果您区分这两种方法,它有一些很大的好处,例如:
- 如果让hibernate生成DDL,它会自动为基本类型创建不为空的约束。
- 如果你在web对象和实体之间做映射,你有隐含的NPE,这表明你的代码中有问题,这种行为不会使你的数据不一致
还有一件有趣的事。如果你使用Lombok库,喜欢在实体上使用@Getter和@Setter,并且你用Persistable接口控制SelectBeforeInsert行为,那么你应该总是使用像Integer这样的大框类型,因为你不能用像Persistable这样的基本类型做泛型。如果你使用Persistable + lombok的@Getter +你的ID被命名为" ID "那么你就有了getId的隐式重写getter方法。