盒装与原始类型作为实体 id

在 JPA(Hibernate 实现)中,哪种类型更适合用于实体的 id: 装箱类型(例如Integer)或未装箱类型(例如int)?

一个朋友说你应该使用 Boxed 类型,因为当你在你的程序中创建一个新实体时,Hibernate 看到 idnull并理解它应该在数据库中创建一个新行(相反,如果 id 不是nullHibernate 可能会更新现有行在数据库中)。

但是我的实体的 id 是int,它运行良好,没有任何错误,我们知道原始实例变量的默认值是0. 所以他说,也许 hibernate 将其0视为特殊对象,并假设该对象是一个新对象。


HUX布斯
浏览 129回答 3
3回答

慕工程0101907

好吧,我们使用非原语,我们有充分的理由这样做。int/Integer例如,我们的许多领域都具有绝对zero有效的商业价值。例如,考虑一个债务字段 - 如果该字段是zero,那就太好了,这意味着您没有债务。问题在于,对于原语,零是默认值 - 因此您可能会不小心忘记设置它,例如通过 a setDebt,因此它可能会以您从未打算去那里的值到达您的数据库。出于这个原因,我们使用Integer一些永远不应该为空的验证;但即使我们忘记添加适当的验证,该代码也可能会因 a (最好在测试中)而中断,NullPointerException我更喜欢 Exception 而不是数据库中的不一致值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java