2011-10-07 5 views
5

all. Ho un problema con la generazione di schemi DB tramite hbm2ddl. Voglio utilizzare il generatore di sequenze condiviso per tutte le chiavi private. Così l'ho definito una volta in qualche entità.Generatore di sequenza condivisa per la creazione di schemi ID e DB utilizzando hbm2ddl

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

Quindi voglio utilizzare questo generatore di sequenze per tutti gli 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;  
    .... 
} 

Quando eseguo hbm2ddl compito formica ottengo un'eccezione:

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

E 'un problema o che sto facendo qualcosa di sbagliato?

+0

Su quale database stai provando a fare questo? –

+0

Sto provando a generare uno script per la creazione di schemi per Oracle 11g. – Vladimir

risposta

0

L'importazione di sequenza, ovvero l'annotazione @SequenceGenerator deve essere presentata in tutte le classi. Quindi, fare una classe astratta con questa annotazione ed estendere tutte le entità da esso:

@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

Grazie per la risposta @forker. Ma javadoc per @SequenceGenerator ci dice che "" Un generatore di sequenze può essere specificato sulla classe di entità o sul campo o sulla proprietà della chiave primaria.L'ambito del nome del generatore è globale per l'unità di persistenza (attraverso tutti i tipi di generatore) "'. – Vladimir

2

La soluzione di questo porblem è stata la definizione @SequenceGenerator condivisa nel file di package-ingo.java per il pacchetto sono stati i miei soggetti collocato.