Java Hibernate:使用原语long for identifier属性

Java Hibernate:使用原语long for identifier属性,java,hibernate,Java,Hibernate,根据Hibernate文档: 我们建议您在持久类上声明一致命名的标识符属性,并使用可空(即非基本)类型 当GenerationType设置为AUTO且标识符属性为long(primitive)类型时,会出现哪些问题?使用long对象,即java.lang.long 我认为hibernate可能在基本类型方面存在问题,因为有时它可能会尝试将其设置为null当使用hibernate的“示例查询”功能时,可能需要id的null值,例如,当尝试查找一组具有不同id值的对象时。在这种情况下,long id

根据Hibernate文档:

我们建议您在持久类上声明一致命名的标识符属性,并使用可空(即非基本)类型


当GenerationType设置为AUTO且标识符属性为long(primitive)类型时,会出现哪些问题?

使用
long
对象,即
java.lang.long


我认为hibernate可能在基本类型方面存在问题,因为有时它可能会尝试将其设置为
null

当使用hibernate的“示例查询”功能时,可能需要id的
null
值,例如,当尝试查找一组具有不同id值的对象时。在这种情况下,
long id
,默认值为
0
,可能与
long id
不同,值为
null
-可能值
0
是数据库中的有效id?

我知道基元类型可能有问题。我的问题是这些问题可能是什么。有时它可能会尝试将其设置为null。您知道这些情况是什么吗?我猜,如果您尝试将新对象插入数据库,该id字段可能需要为null(对于自动增量PK)。如果它是一个原语,它将尝试插入id为0的项或某些默认值不起作用的项。我尝试插入一个新实例(长标识符的默认值为0),它可以工作。属性值更改为生成的标识符。在我的情况下,数据库中没有使用ID 0,因此我没有遇到此类问题。仅仅因为没有使用
0
,并不意味着从Hibernate的角度来看,假设
0
实际上是您试图检索的对象的ID值是没有意义的,因此在这种情况下不会返回任何对象。省去麻烦,使用
Long
:)