Hibernate 使用hbm2ddl创建IDs和DB方案的共享序列生成器
全部。我对通过hbm2ddl生成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
@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告诉我们,
“序列生成器可以在实体类或主键字段或属性上指定。生成器名称的范围对于持久性单元是全局的(跨所有生成器类型)”
。