1

我正在开发一个支持多个数据库和休眠满足该要求的应用程序。

现在问题在于主自动生成密钥。一些数据库支持自动增量和一些增加标识所需的序列。要解决此问题,请使用以下策略

strategy = GenerationType.TABLE (javax.persistence)

这满足了我的要求。

在这篇文章中,一位用户评论说

如果您需要按顺序排列 id,最好使用增量或序列而不是表生成

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

更新我,使用增量或序列而不是表生成真的更好,或者它只是一个语句?

4

1 回答 1

0

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

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

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

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

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

但是,这将导致每次插入至少两次查询 id 分配表:一次查询最新 id 的值,一次检索它。

于 2013-04-29T21:49:45.897 回答