Hibernate 使用hbm2ddl创建IDs和DB方案的共享序列生成器

Hibernate 使用hbm2ddl创建IDs和DB方案的共享序列生成器,hibernate,hbm2ddl,Hibernate,Hbm2ddl,全部。我对通过hbm2ddl生成DB方案有问题。 我想对所有私钥使用共享序列生成器。所以我在某个实体中定义了它一次 @Entity @SequenceGenerator(name = "MY_SEQUENCE_GENERATOR", sequenceName = "MY_SEQ") public class MyEntity implements Serializable { .... } 然后我想对所有ID使用这个序列生成器 public class SomeEntity1 impleme

全部。我对通过hbm2ddl生成DB方案有问题。 我想对所有私钥使用共享序列生成器。所以我在某个实体中定义了它一次

@Entity
@SequenceGenerator(name = "MY_SEQUENCE_GENERATOR", sequenceName = "MY_SEQ")
public class MyEntity implements Serializable {
 ....
}
然后我想对所有ID使用这个序列生成器

public class SomeEntity1 implements Serializable {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =  "MY_SEQUENCE_GENERATOR")
  Long id;     
  ....
}

public class SomeEntity2 implements Serializable {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =  "MY_SEQUENCE_GENERATOR")
  Long id;     
  ....
}
当我运行hbm2ddl ant任务时,我得到一个异常:

[hibernatetool] javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: MY_SEQUENCE_GENERATOR
[hibernatetool] org.hibernate.AnnotationException: Unknown Id.generator: MY_SEQUENCE_GENERATOR

这是一个问题还是我做错了什么?

序列导入,即
@SequenceGenerator
注释应在所有类中显示。因此,使用此注释创建一个抽象类,并从中扩展所有实体:

@SequenceGenerator(name = "MY_SEQUENCE_GENERATOR", sequenceName = "MY_SEQ")
public abstract class BaseEntity implements Serializable {
 ....
}

public class SomeEntity1 extends BaseEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =  "MY_SEQUENCE_GENERATOR")
  Long id;     
  ....
}

public class SomeEntity2 extends BaseEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =  "MY_SEQUENCE_GENERATOR")
  Long id;     
  ....
}

这个问题的解决方案是在package-ingo.java文件中定义shared@SequenceGenerator,用于我的实体所在的包。

您试图在哪个数据库上执行此操作?我正在尝试为Oracle 11g生成方案创建脚本。感谢@forker的响应。但是@SequenceGenerator的javadoc告诉我们,
“序列生成器可以在实体类或主键字段或属性上指定。生成器名称的范围对于持久性单元是全局的(跨所有生成器类型)”