Генератор общей последовательности для создания идентификаторов и схемы БД с использованием hbm2ddl - PullRequest
5 голосов
/ 07 октября 2011

все. У меня проблема с генерацией схемы БД через hbm2ddl. Я хочу использовать генератор общей последовательности для всех закрытых ключей. Поэтому я определил это однажды в какой-то сущности.

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

Тогда я хочу использовать этот генератор последовательности для всех идентификаторов.

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 ]

2 голосов
/ 11 октября 2011

Решением этой проблемы было определение общего @SequenceGenerator в файле package-ingo.java для пакета, в который были помещены мои сущности.

0 голосов
/ 08 октября 2011

Импорт последовательности, то есть @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;     
  ....
}
...