Jpa实体生成器将Integer类型分配给我的实体的id字段。我的数据库中相应的属性/列是serial类型(yep postgres
)。我还会将整数类型分配给我的实体id字段。但我在this page上看到Long getId()
的使用情况。我也在geomajas示例中看到了这种类型的分配。使用Integer
时有什么问题吗?我的意思是,是的,你必须小心id不低于0的整数,但同时你还必须确保你的Long Id不大于2,147,483,647。那么这里有什么交易?
Long
和无符号整数之间产生了混淆,所以我想我的想法是“对于java实体的id字段的无符号整数与Integer
”这是废话,现在我的长整数和无符号整数之间的混淆消失了。我的错。感谢您的回答和评论。我想如果我会使用bigserial jpa实体生成器也会使用Long。
答案 0 :(得分:12)
Long
的容量远大于Integer
数据类型,因此如果您不确定数据的长度,最好使用Long
类型数据。 ..
另一方面,由于Long
容量较大,因此会占用额外空间,如果您确定数据不会大于Integer
数据类型,则使用Long
只是让你的代码效率低下
答案 1 :(得分:8)
Jpa实体生成器将Integer类型分配给我的实体的id字段
您设置了id字段的类型,JPA生成器使用唯一值填充它。您可以自由使用Integer或Long。
使用Integer时有什么问题吗?
不是真的,整数与...之间的唯一区别长是位数(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
生成器将为Id字段分配值。您可以控制初始生成的值:对于@SequenceGenerator和@TableGenerator,设置initialValue属性;对于Identity Generator,修改Identity列的数据库DDL定义。
只需确定(应用每周生成的最大ID数)x(您的应用可以“直播”的最长周数)。如果结果小于,例如1,500,000,000(给出安全边际),请随意使用Integer;否则使用龙。
答案 2 :(得分:1)
最大的'陷阱'是在查询实体时,需要使用EXACT TYPE,或者实现抛出异常。这是一个RUNTIME例外。
@Configuration
@EnableJms
public class JmsConfiguration implements JmsListenerConfigurer {
@Value("${message-consumer.destination}")
private String destination;
@Inject
private MessageListener messageListener;
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setId("audit.logging");
endpoint.setDestination(destination);
endpoint.setMessageListener(messageListener);
registrar.registerEndpoint(endpoint);
}
我认为,为了可维护性,实体之间的一致性与任何内存考虑一样重要。
为了进一步推论这个论点,请考虑“' size'不会影响数据库的数据包。