JPA SequenceGenerator:单个 table 中的所有生成器
JPA SequenceGenerator: All generators in single table
我正在使用 3 种不同的 JPA SequenceGenerators。每个人都在给定名称的数据源中创建自己的 table:
@SequenceGenerator(name = "a_seq", sequenceName = "A_SEQ")
@SequenceGenerator(name = "b_seq", sequenceName = "B_SEQ")
@SequenceGenerator(name = "c_seq", sequenceName = "C_SEQ")
有没有办法将它们全部组合成一个 table,比方说 SEQUENCE table,每个生成器在这个 table 中排成一行?
像这样。示例代码。
@Entity(name = "project_document")
public class Document {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int idx;
// ... setter, getter
}
...
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ")
private long id;
enter link description here
您需要使用 Table
生成器(它将 id 值存储在指定的 table 中)而不是 Sequence
生成器(它使用原生 SQL 序列) .下面这个简化的示例应该可以让您了解,但您可以通过在 @TableGenerator
注释上指定更多属性来控制 table 的架构。
@TableGenerator(name="MyTableGen", table="SEQUENCES", pkColumnValue="MyClass")
@Entity
public class MyEntity
{
@Id
@GeneratedValue(strategy=GenerationType.TABLE, generator="MyTableGen")
private long myId;
...
}
我正在使用 3 种不同的 JPA SequenceGenerators。每个人都在给定名称的数据源中创建自己的 table:
@SequenceGenerator(name = "a_seq", sequenceName = "A_SEQ")
@SequenceGenerator(name = "b_seq", sequenceName = "B_SEQ")
@SequenceGenerator(name = "c_seq", sequenceName = "C_SEQ")
有没有办法将它们全部组合成一个 table,比方说 SEQUENCE table,每个生成器在这个 table 中排成一行?
像这样。示例代码。
@Entity(name = "project_document")
public class Document {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int idx;
// ... setter, getter
}
...
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ")
private long id;
enter link description here
您需要使用 Table
生成器(它将 id 值存储在指定的 table 中)而不是 Sequence
生成器(它使用原生 SQL 序列) .下面这个简化的示例应该可以让您了解,但您可以通过在 @TableGenerator
注释上指定更多属性来控制 table 的架构。
@TableGenerator(name="MyTableGen", table="SEQUENCES", pkColumnValue="MyClass")
@Entity
public class MyEntity
{
@Id
@GeneratedValue(strategy=GenerationType.TABLE, generator="MyTableGen")
private long myId;
...
}