是否有任何明显的区别,
<property name="pwdRetryCount" type="java.lang.Integer"> <column name="pwd_retry_count" /> </property>
字符串和
<property name="pwdRetryCount" type="int"> <column name="pwd_retry_count" /> </property>
型
9w11ddsr1#
它们只有在处理空值时才有明显的区别。这是因为int是基本数据类型,不能为其分配null,而java.lang.Integer是int的 Package 类,可以接受null。因此,如果pwd_retry_count列是可空的,并且您使用int来Map实体对象,对于pwd_retry_count为空的记录,将发生错误,因为int无法存储空值。
int
java.lang.Integer
pwd_retry_count
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实体之间共生。
Persistable<int>
Persistable<Integer>
2条答案
按热度按时间9w11ddsr1#
它们只有在处理空值时才有明显的区别。
这是因为
int
是基本数据类型,不能为其分配null,而java.lang.Integer
是int
的 Package 类,可以接受null。因此,如果
pwd_retry_count
列是可空的,并且您使用int
来Map实体对象,对于pwd_retry_count
为空的记录,将发生错误,因为int
无法存储空值。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实体之间共生。