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

Is it OK to have a duplicate generator named defined in the JPA persistence unit?

我的情况描述如下:

eclipse Duplicate generator named "ID_GENERATOR" defined in this persistence unit

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

"多个@SequenceGenerator 具有相同名称是否有效,即使它用于此目的Hibernate : How override an attribute from mapped super class"

如果无效,是否有替代方案?

非常感谢您的回答。

我认为这是有效的,因为归根结底,这就是 hibernate 将实体映射到序列的方式,当它将实体持久保存在数据库中时,该序列将生成 ID。例如,Oracle 不关心哪些表使用哪个序列,因为序列本身是一个独立的实体。 IMO 此警告(或错误)更有意义,具体取决于您使用的 DBMS。 IMO,我只是在 eclipse 中禁用错误​​警告。

根据 JPA 2.1 规范的 11.1.48 SequenceGenerator Annotation 部分:

The scope of the generator name is global to the persistence unit (across all generator types).

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

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

@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;
}

Hibernate 将生成以下错误消息:

Multiple references to database sequence [sequence] were encountered attempting to set conflicting values for 'increment size'. Found [10] and [5]

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