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

时间:2011-10-07 14:46:23

标签: hibernate hbm2ddl

所有。我有通过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

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

2 个答案:

答案 0 :(得分:2)

这个问题的解决方案是在package-ingo.java文件中定义共享的@SequenceGenerator for package是我放置的实体。

答案 1 :(得分:0)

序列导入,即@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;     
  ....
}