Генератор общей последовательности для создания идентификаторов и создания схемы БД с использованием hbm2ddl
Все. У меня проблема с генерацией схемы БД через 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 ответа
Решением этой проблемы было определение общего @SequenceGenerator в файле package-ingo.java для пакета, в который были помещены мои объекты.
Последовательность импорта, т.е. @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;
....
}