Hibernate:java.lang. java和int有什么区别吗?

m3eecexj  于 2023-11-21  发布在  Java
关注(0)|答案(2)|浏览(148)

是否有任何明显的区别,

<property name="pwdRetryCount" type="java.lang.Integer">
    <column name="pwd_retry_count" />
</property>

字符串

<property name="pwdRetryCount" type="int">
    <column name="pwd_retry_count" />
</property>

9w11ddsr

9w11ddsr1#

它们只有在处理空值时才有明显的区别。
这是因为int是基本数据类型,不能为其分配null,而java.lang.Integerint的 Package 类,可以接受null。
因此,如果pwd_retry_count列是可空的,并且您使用int来Map实体对象,对于pwd_retry_count为空的记录,将发生错误,因为int无法存储空值。

n6lpvg4x

n6lpvg4x2#

上面的答案是完全正确的,我只是输入额外的信息。
对于可选值,使用可空类型(装箱的原始类型,如NULL,Double等)。这取决于您的模型是否有意义特定值是可选的。如果必须有默认值,您可以创建@PreX回调(例如@PreLoad)或重写getter以返回默认值的原始类型。
使用基本类型作为所需的值。如果你区分这两种方法,它会有一些很大的好处,比如:
1.如果你让hibernate生成null,它将自动为基本类型创建not null约束。
1.如果您在Web数据到对象和实体之间进行Map,则会有隐式NPE,它指示代码中的问题,并且该行为不会使数据不一致。
不过有一件有趣的事情。如果你使用Lombok库,喜欢在实体上使用@Getter和@Setter,并且你用Persistable接口控制SelectBeforeInsert行为,那么你应该总是使用大的盒装类型,比如BLOG,因为你不能用Persistable<int>这样的原始类型做泛型。如果你使用Persistable<Integer> + lombok的@Getter +,你的ID就像“id”一样命名。那么你就有了getId的隐式覆盖getter方法。它只是在lombok + jpa实体之间共生。

相关问题