增量或序列而不是表生成JPA

时间:2013-03-14 01:59:44

标签: java hibernate jpa

我正在开发一个支持多个数据库的应用程序,并且hibernate满足了这个要求。

现在问题出现在主要自动生成密钥中。一些数据库支持自动增量和一些增加身份所需的序列。要解决这个问题,请使用以下策略

strategy = GenerationType.TABLE (javax.persistence)

这符合我的要求。

在此post中,用户评论

如果您需要按顺序显示ID,那么使用增量或序列代替表生成总是更好

如果我使用自动增量或序列,则意味着当我将一个数据库移动到另一个数据库时,需要对注释级别进行一些更改(额外负担)

更新我,使用增量或序列代替表生成真的更好,或者它只是一个声明?

1 个答案:

答案 0 :(得分:0)

自动增量缺点:在事务提交之前你不知道id(这可能是JPA中的一个问题,因为一些EntityManager操作依赖于Id)。并非所有数据库都支持自动增量字段。

序列缺陷:并非所有数据库都有序列。

表缺点:Id不一定是连续的。

由于您不太可能用完Id,因此使用Table生成仍然是一个不错的选择。你甚至可以调整id分配大小,以便使用更多的连续id(默认大小为50):

@TableGenerator(name="myGenerator", allocationSize=1)

但是,这将导致每个插入的id分配表至少有两个查询:一个用于处理最新id的值,另一个用于检索它。