JPA SequenceGenerator 和 GeneratedValue:名称/生成器属性仅每个类唯一?

MrS*_*rub 5 postgresql jpa sequence auto-increment openjpa

我使用 JPA + OpenJPA 和 PostgreSQL 作为后端 RDBMS。我的表的主键通常由SERIAL/BIGSERIAL列组成。因此 PostgreSQL 会自动为新条目 ( strategy=GenerationType.IDENTITY)生成 ID 。

ID 属性的注释如下所示:

@Id
@SequenceGenerator(name="myseq",sequenceName="foobartable_fooid_seq")
@GeneratedValue(generator="myseq",strategy=GenerationType.IDENTITY)
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以将此注释块复制并粘贴到多个实体,同时只修改sequenceName值吗?该sequenceName是从桌到桌不同。但是所有实体的 SequenceGenerator 都可以命名myseq吗?还是必须为每个实体的 SequenceGenerator 指定一个唯一的生成器名称?那么每个 SequenceGenerator 名称在持久化单元中必须是唯一的吗?

使用与数据库中的 sequenceName 相同的值可能是个好主意吗?所以我会写一些类似的东西

@Id
@SequenceGenerator(name="foobartable_fooid_seq",sequenceName="foobartable_fooid_seq")
@GeneratedValue(generator="foobartable_fooid_seq",strategy=GenerationType.IDENTITY)
Run Code Online (Sandbox Code Playgroud)

关于如何命名 SequenceGenerator 的任何建议?

非常感谢您的任何建议!

你的 Snrub 先生

Per*_*ion 3

Javadoc for来看SequenceGenerator,重点是我的:

定义一个主键生成器,当为 generatedValue 注释指定生成器元素时,可以通过名称引用该生成器。序列生成器可以在实体类或主键字段或属性上指定。生成器名称的范围对于持久性单元是全局的(跨所有生成器类型)。

因此,您需要为持久性单元中定义的每个序列使用唯一的名称。切线,你的GeneratedValue策略应该是序列,正如上面评论中指出的那样。