Java Hibernate:使用原语long for identifier属性
根据Hibernate文档: 我们建议您在持久类上声明一致命名的标识符属性,并使用可空(即非基本)类型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
当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
:)