【发布时间】:2013-01-23 14:57:51
【问题描述】:
我使用 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)
关于如何命名 SequenceGenerators 有什么建议吗?
非常感谢您的任何建议!
你的, 斯鲁布先生
【问题讨论】:
-
首先,如果你使用序列生成器,你就没有使用 IDENTITY 策略(这将包括使用像 MySQL 那样的自动增量列)。剩下的,你为什么不直接去做,看看会发生什么?或者您也可以阅读 SequenceGenerator 的 javadoc,它说:生成器名称的范围对于持久性单元是全局的(跨所有生成器类型).
标签: postgresql jpa sequence auto-increment openjpa