我正在开发一个使用Hibernate和MySQL的项目。我打算使用序列为数据库中的所有表生成ID。(很难描述我的问题,所以我会给你举个例子)。
例如:我有两个表A & B。首先,我向表A插入10条记录,它们的ID为1到10。然后,我将10个记录插入表B,我希望它们的ID将是11-20,而不是1-10。这意味着生成的ID值将由数据库中所有表中的所有记录计算,而不是在单个表中计算。
那么,我如何在MySQL中使用这个概念呢?声明和语法?在Hibernate中,如何使用数据模型上的策略和生成器来将生成的策略应用到数据库中?非常感谢!
发布于 2011-02-16 11:25:01
Mysql中没有序列,但可以使用“表”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 [...]。
编辑
非常感谢你。但是,我们是否有另一种方法来使用该片段而不将其添加到每个实体中?在数据库上创建表时,我如何声明数据库管理系统的ID主键列来自动生成这样的值?- napoleonit76
不幸的是,我不知道有什么好办法来做到这一点。在我的项目中,我们在几个实体中使用a序列,我们需要在每个类中声明序列。您可以尝试的一件事(但我不太喜欢)是为所有实体创建一个超类,这个超类只包含ID字段和注释。我有一种感觉,我已经在一个项目中看到了这个,但我并不是百分之百肯定。
关于告诉DB使用这个策略,我认为这是不可能的。您可以尝试添加触发器并将其应用于架构中的每个表。当您在表中插入新行时,触发器将触发,从生成器表中选择一个值,并将其添加到该行中。老实说,我不知道这是否可行,而且我99%肯定,如果您有两个并发会话创建行,这是行不通的。
您能否重新考虑您的策略,并对ids使用普通的自动增量列,并将顺序编号放在表的另一列中?
https://stackoverflow.com/questions/5015766
复制相似问题