Đin*_*hâu 6 mysql hibernate sequence auto-generate
我正在使用Hibernate和MySQL的项目中。我打算使用序列来为数据库中的所有表生成ID。(很难描述我的问题,因此我将向您举例说明)。
例如:我有2个表A和B。首先,我在表A中插入10条记录,它们的ID为1到10。然后,我在表B中插入10条记录,我希望它们的ID为11-20,而不是1-10。这意味着生成的ID值将由数据库中所有表(而不是单个表)中的所有记录计算。
那么如何在MySQL中使用该概念呢?声明和语法?在Hibernate中,如何使用策略和数据模型生成器将生成的策略应用于数据库?非常感谢!
您在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;
}
Run Code Online (Sandbox Code Playgroud)
您可能需要@javax.persistence.TableGenerator [...]在所有实体中添加代码段
非常感谢。但是,我们是否可以使用另一种方式而不将其添加到每个实体中?当在数据库上创建表时,如何为DBMS声明ID主键列以自动生成类似的值?– napoleonit76
不幸的是,我不知道执行此操作的优雅方法:( ..在我的项目中,我们在多个实体中使用一个序列,并且需要在每个类中声明该序列。您可以尝试做一件事(但是我不(真的很喜欢)是为您所有的实体创建一个超类,并且该超类仅包含ID字段和注释。我有在项目中看到过的感觉,但我不确定100% 。
关于告诉数据库使用该策略,我认为这是不可能的。您可以尝试添加触发器并将其应用于架构中的每个表。当您在表中插入新行,从生成器表中选择一个值并将其添加到该行时,触发器将触发。老实说,我不知道这是否行得通,如果您有2个并发会话创建行,则我99%确信这将行不通。
您是否可以重新考虑策略,并使用常规的自动递增列作为ID,并将序列号放在表的另一列中?
| 归档时间: |
|
| 查看次数: |
13581 次 |
| 最近记录: |