当前位置: 首页 > 知识库问答 >
问题:

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

阎昌勋
2023-03-14

我使用带有PostgreSQL的JPA OpenJPA作为后端RDBMS。我的表的主键通常由SERIAL/BIGSERIAL列组成。因此PostgreSQL自动为新条目生成ID(策略=GenerationType. IDENT)。

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)

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

非常感谢您的建议!

你的,斯努布先生

共有1个答案

龚镜
2023-03-14

从Javadoc forSequenceGenerator,我的重点是:

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

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

 类似资料:
  • 我正在使用jOOQ codegen maven插件和jOOQ meta hibernate扩展成功地生成jOOQ类。 表/列的生成类和方法的名称使用实际的DB表和列名。 生成是否可以在类简单名称和实例变量名称上使用实体(名称=表)和列(名称=列)? 对我来说,在使用jOOQ创建查询时,使用与JPA类相同的名称会更直观。 谢谢

  • 问题内容: 对于Linux和Windows OS,是否有一种方法可以将计算机名称作为ant属性获得。 问题答案: 在Windows上,主机名位于环境变量“ COMPUTERNAME”中,在Linux上,环境变量为“ HOSTNAME”。由于ant属性是不可变的,因此应执行以下操作: 即,将环境作为带有env前缀的属性导入。然后将env.HOSTNAME设置为env.COMPUTERNAME的值,除

  • 问题内容: 我有一个疑问,因为@Entity和@Table中都存在name属性 例如,允许名称属性具有相同的值 我也可以在同一班上使用不同的名字 谁能告诉我这两者之间有什么区别,为什么我们两者都具有相同的属性? 问题答案: DB 因此,在第一种情况下,表和实体将具有相同的名称,这将允许您在编写HQL或JPQL时以与实体相同的名称访问表。 在第二种情况下,编写查询时,您必须使用 @Entity中提供

  • 我正在努力寻找/整合我在网上找到的任何解决方案,以帮助为每个div生成一个独特的类。例如,如果将div称为“gallery-div”,并将1添加到每个div中,例如gallery-div1、gallery-div2、gallery-div3等,则会很好。 这是我目前拥有的(还没有设置唯一的类): null null 我之所以不只是更改当前的div类,是因为我将div保存在一个单独的文件中,该文件可

  • 问题内容: 我正在使用JSON.NET,我想从XML转换为JSON。 我正在使用JsonConvert.SerializeXNode(node),我注意到我的json对象具有在其名称前面带有@的属性: 因此,例如:如果我有: JSON对象是: 为什么在JSON中插入“ @”,有什么方法可以避免插入“ @”字符? 问题答案: 我认为这就是json.net关于@符号的工作方式。您始终可以在json字符

  • 问题内容: 我有一堂课,有以下领域。这些属性用于在需要调用外部rest API方法时序列化为json对象。 在属性名称中,外部API服务调用需要一些类似json归档名称格式的内容。 就我而言,这可以根据诸如test,dev和prod之类的环境进行更改。因此,我正在寻找一种将listId值移动到app.config中的方法。 我尝试按照以下方式进行操作,但不允许这样做。如果分配常数值,它将起作用。