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;

    ...
}