2011-10-07 17 views
5

wszystko. Mam problem z generowaniem schematu DB przez hbm2ddl. Chcę użyć wspólnego generatora sekwencji dla wszystkich kluczy prywatnych. Tak więc zdefiniowałem to raz w jakiejś istocie.Udostępniony generator sekwencji dla identyfikatorów i tworzenia schematów DB przy użyciu hbm2ddl

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

Następnie chcę użyć tego generatora sekwencji dla wszystkich identyfikatorów.

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;  
    .... 
} 

Kiedy biegnę hbm2ddl ant zadanie uzyskać wyjątek:

[hibernatetool] javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unknown Id.generator: MY_SEQUENCE_GENERATOR 
[hibernatetool] org.hibernate.AnnotationException: Unknown Id.generator: MY_SEQUENCE_GENERATOR 

Czy jest to kwestia czy robię coś źle?

+0

Na jakiej bazie danych próbujesz to zrobić? –

+0

Próbuję wygenerować skrypt do tworzenia schematów dla Oracle 11g. – Vladimir

Odpowiedz

0

Import sekwencji, tzn. Adnotacja @SequenceGenerator powinna być prezentowana we wszystkich klasach. Tak uczynić klasy abstrakcyjnej z tej adnotacji i przedłużyć wszystkie podmioty od niego:

@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;  
    .... 
} 
+0

Dzięki za odpowiedź @forker. Ale javadoc dla @SequenceGenerator mówi nam, że '" Generator sekwencji może być określony w klasie encji lub w polu klucza podstawowego lub właściwości.Ogól nazwy generatora jest globalny do jednostki utrwalania (we wszystkich typach generatorów) "'. – Vladimir

2

Rozwiązanie tego porblem został udostępniony @SequenceGenerator zdefiniowanie w pliku package-ingo.java pakietu zostały umieszczone moje podmioty.