我正在开发一个支持多个数据库的应用程序,并且hibernate满足了这个要求。
现在问题出现在主要自动生成密钥中。一些数据库支持自动增量和一些增加身份所需的序列。要解决这个问题,请使用以下策略
strategy = GenerationType.TABLE (javax.persistence)
这符合我的要求。
在此post中,用户评论
如果您需要按顺序显示ID,那么使用增量或序列代替表生成总是更好
如果我使用自动增量或序列,则意味着当我将一个数据库移动到另一个数据库时,需要对注释级别进行一些更改(额外负担)
更新我,使用增量或序列代替表生成真的更好,或者它只是一个声明?
答案 0 :(得分:0)
自动增量缺点:在事务提交之前你不知道id(这可能是JPA中的一个问题,因为一些EntityManager操作依赖于Id)。并非所有数据库都支持自动增量字段。
序列缺陷:并非所有数据库都有序列。
表缺点:Id不一定是连续的。
由于您不太可能用完Id,因此使用Table生成仍然是一个不错的选择。你甚至可以调整id分配大小,以便使用更多的连续id(默认大小为50):
@TableGenerator(name="myGenerator", allocationSize=1)
但是,这将导致每个插入的id分配表至少有两个查询:一个用于处理最新id的值,另一个用于检索它。