6

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

@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

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

4

2 回答 2

2

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

于 2011-10-11T08:34:57.877 回答
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;     
  ....
}
于 2011-10-07T23:17:50.667 回答