您在 Mysql 中没有序列,但您可以使用 'TABLE' id 生成
@javax.persistence.TableGenerator(
name="EMP_GEN",
table="GENERATOR_TABLE",
pkColumnName = "key",
valueColumnName = "hi"
pkColumnValue="EMP",
allocationSize=20
)
@Entity
public class Klass {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator=EMP_GEN)
@Column(name = "ID")
private Long id;
}
您可能需要@javax.persistence.TableGenerator [...]
在所有实体中添加代码段
编辑
非常感谢。但是我们是否有另一种方法来使用该片段而不将其添加到每个实体中?在数据库上创建表时,如何声明 DBMS 的 ID 主键列以自动生成这样的值?– 拿破仑76
不幸的是,我不知道这样做的优雅方式:(。在我的项目中,我们在多个实体中使用 a 序列,我们需要在每个类中声明序列。你可以尝试一件事(但我不t真的很喜欢)是为所有实体创建一个超类,并且该超类仅包含ID字段和注释。我感觉我在一个项目中看到过这个,但我不是100%确定.
关于告诉数据库使用该策略,我认为这不太可能。您可以尝试添加触发器并将其应用于架构中的每个表。当您在表中插入新行、从生成器表中选择一个值并将其添加到该行时,触发器将触发。老实说,我不知道这是否可行,而且我 99% 确定如果您有 2 个并发会话创建行,这将无法正常工作。
您能否重新考虑您的策略并使用普通的自动递增列作为 id 并将序号放在表的另一列中?