对于java实体的id字段的Long与Integer

osh*_*osh 11 java persistence jpa

Jpa实体生成器将Integer类型分配给我的实体的id字段.我的数据库中相应的属性/列是serial(yep postgres)类型.我还会将整数类型分配给我的实体id字段.但我已经看到Long getId()这个页面上的用法.我也在geomajas示例中看到了这种类型的分配.在使用方面有什么问题Integer吗?我的意思是,是的,你必须小心id不低于0的整数,但同时你还必须确保你的Long Id不大于2,147,483,647.那么这里有什么关系?

编辑:我正在Long和无符号整数之间产生混淆,所以我想我的想法是"无符号整数与Integerjava实体的id字段",这是无意义的,因为我的长整数和无符号整数之间的混淆消失了.我的错.感谢您的回答和评论.我想如果我会使用bigserial jpa实体生成器也会使用Long.

小智 14

Long具有比Integer数据类型大得多的容量,因此如果您不确定数据的长度,最好使用Long类型数据...

另一方面,由于Long具有更大的容量,它使用额外的空间,如果您确定您的数据不会大于Integer数据类型那么使用Long只会使您的代码效率低下


Gle*_*est 8

Jpa实体生成器将Integer类型分配给我的实体的id字段

您设置了id字段的类型,JPA生成器使用唯一值填充它.您可以自由使用Integer或Long.

在使用Integer时有什么问题吗?

不是真的,Integer和Long之间的唯一区别是位数(64 v 32)和允许范围:

Integer:             -2,147,483,648  to  2,147,483,647
Long:    -9,223,372,036,854,775,808  to  9,223,372,036,854,775,807
Run Code Online (Sandbox Code Playgroud)

生成器将为Id字段分配值.您可以控制初始生成的值:对于@SequenceGenerator和@TableGenerator,设置initialValue属性; 对于Identity生成器,修改Identity列的数据库DDL定义.

只需确定(应用程序每周生成的最大ID数)x(您的应用程序可以"活动"的最长周数).如果结果小于,例如1,500,000,000(给出安全边际),请随意使用Integer; 否则使用龙.