我使用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的任何建议吗?
非常感谢任何建议!
此致, Snrub先生
答案 0 :(得分:2)
从SequenceGenerator
GeneratedValue
开始,重点是我的:
定义一个主键生成器,当a时,可以通过名称引用它 为GeneratedValue批注指定了generator元素。一个 序列生成器可以在实体类上指定 主键字段或属性。 生成器名称的范围是 全局到持久性单元(跨所有生成器类型)。
因此,您需要为持久性单元中定义的每个序列使用唯一的名称。在切线上,您的{{1}}策略应该是SEQUENCE,正如上面的评论所指出的那样。