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

2024-02-20

我使用 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 名称在持久性单元中必须是唯一的吗?

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

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

关于如何命名序列生成器有什么建议吗?

非常感谢您的任何建议!

你的, 斯恩鲁布先生


来自Javadoc http://docs.oracle.com/javaee/6/api/javax/persistence/SequenceGenerator.html for SequenceGenerator,重点是我的:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA SequenceGenerator 和 generatedValue:名称/生成器属性仅每个类唯一? 的相关文章

随机推荐