是否可以在JPA持久性单元中定义一个名为的重复生成器?

fab*_*474 8 java orm hibernate jpa hibernate-mapping

我的情况在这里描述:

eclipse在此持久性单元中定义的名为"ID_GENERATOR"的重复生成器

但是我的问题是不同的,所选答案并没有解决它:

" 有多个@SequenceGenerator 具有相同的名称是否有效,即使它用于此目的Hibernate:如何覆盖映射超类的属性 "

如果无效,还有替代方案吗?

非常感谢您的回答.

Vla*_*cea 4

根据11.1.48 SequenceGenerator AnnotationJPA 2.1 规范的部分:

生成器名称的范围对于持久性单元是全局的(跨所有生成器类型)。

所以你不能有重复的生成器。

如果您尝试添加以下两个实体:

@Entity(name = "Post")
public static class Post {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pooled")
    @GenericGenerator(
        name = "pooled",
        strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
        parameters = {
            @Parameter(name = "sequence_name", value = "sequence"),
            @Parameter(name = "initial_value", value = "1"),
            @Parameter(name = "increment_size", value = "5"),
        }
    )
    private Long id;
}

@Entity(name = "Announcement")
public static class Announcement {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pooled")
    @GenericGenerator(
            name = "pooled",
            strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
            parameters = {
                @Parameter(name = "sequence_name", value = "sequence"),
                @Parameter(name = "initial_value", value = "1"),
                @Parameter(name = "increment_size", value = "10"),
            }
    )
    private Long id;
}
Run Code Online (Sandbox Code Playgroud)

Hibernate 将生成以下错误消息:

尝试为“增量大小”设置冲突值时遇到对数据库序列 [sequence] 的多个引用。找到[10]和[5]

这是因为标识符生成器是全局的,这两个序列配置将发生冲突。

  • 只需将@Id从基类移动到每个子类中即可。 (3认同)

归档时间:

查看次数:

6052 次

最近记录:

6 年,8 月 前