Java SequenceGenerators名称在hibernate 5中是否全局唯一?

Java SequenceGenerators名称在hibernate 5中是否全局唯一?,java,hibernate,jpa,hibernate-annotations,Java,Hibernate,Jpa,Hibernate Annotations,我正在从Hibernate4.3升级到5.2.13。我有一个模式,其中许多实体从一个本身带有注释的抽象类继承属性。例如: 实体A: @AttributeOverride(name = "id", column = @Column(name = "table_a_id")) @Entity @SequenceGenerator(name = "IdSequenceGenerator", sequenceName = "table_a_seq") @Table(name = "table_a") p

我正在从Hibernate4.3升级到5.2.13。我有一个模式,其中许多实体从一个本身带有注释的抽象类继承属性。例如:

实体A:

@AttributeOverride(name = "id", column = @Column(name = "table_a_id"))
@Entity
@SequenceGenerator(name = "IdSequenceGenerator", sequenceName = "table_a_seq")
@Table(name = "table_a")
public class EntityA extends Identity {

}
实体B:

@AttributeOverride(name = "id", column = @Column(name = "table_b_id"))
@Entity
@SequenceGenerator(name = "IdSequenceGenerator", sequenceName = "table_b_seq")
@Table(name = "table_b")
public class EntityB extends Identity {

}
父类:

@MappedSuperclass
public abstract class Identity {

    private Long id;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "IdSequenceGenerator")
    public Long getId()
    {
        return id;
    }
}
这在Hibernate4下运行正常,但我得到了下面的异常。由此,我假设序列生成器名称不需要全局唯一,但现在它是唯一的。是这样吗?有没有一种方法可以通过配置而不是更改许多实体来解决这个问题

我得到了这个错误:

Caused by: java.lang.IllegalArgumentException: Duplicate generator name IdSequenceGenerator
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addIdentifierGenerator(InFlightMetadataCollectorImpl.java:448)
    at org.hibernate.cfg.AnnotationBinder.lambda$buildGenerators$0(AnnotationBinder.java:3369)
    at java.util.HashMap.forEach(HashMap.java:1288)
    at org.hibernate.cfg.AnnotationBinder.buildGenerators(AnnotationBinder.java:3368)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:728)
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:249)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 54 more

感谢@maheshkumar。抄袭他的评论


序列生成器可以在实体类或主键字段或属性上指定。生成器名称的作用域对于持久性单元是全局的(跨所有生成器类型)

序列生成器可以在实体类或主键字段或属性上指定。生成器名称的作用域对于持久性单元是全局的(跨所有生成器类型)。