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

时间:2013-02-07 22:43:24

标签: postgresql jpa sequence auto-increment openjpa

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

ID属性的注释如下所示:

@Id
@SequenceGenerator(name="myseq",sequenceName="foobartable_fooid_seq")
@GeneratedValue(generator="myseq",strategy=GenerationType.IDENTITY)

我的问题是:我可以将此注释块复制并粘贴到多个实体,而只修改sequenceName值吗? sequenceName与表格不同。但是,所有实体的SequenceGenerator可能被命名为myseq或类似的东西吗?或者是否必须为每个实体的SequenceGenerator指定唯一的生成器名称?这样每个SequenceGenerator名称在持久性单元中必须是唯一的吗?

在数据库中使用与sequ​​enceName相同的值可能是个好主意吗?所以我写了像

这样的东西
@Id
@SequenceGenerator(name="foobartable_fooid_seq",sequenceName="foobartable_fooid_seq")
@GeneratedValue(generator="foobartable_fooid_seq",strategy=GenerationType.IDENTITY)

有关如何命名SequenceGenerators的任何建议吗?

非常感谢任何建议!

此致, Snrub先生

1 个答案:

答案 0 :(得分:2)

SequenceGenerator GeneratedValue开始,重点是我的:

  

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

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