2015-07-22 12 views
6

Sto utilizzando Hibernate con un database MySQL nel mio progetto MVC di primavera. Ho usato l'annotazione @GeneratedValue per impostare auto-incremenet sui miei campi ID. Così tutti i miei entità hanno questo pezzo di codice e tutto funziona come previsto:ibernazione - come impostare l'incremento automatico nei database mysql e oracle?

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name = "id") 
private Integer id; 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

In questo momento, voglio passare a un database Oracle. Ora, ho due domande qui:

1. Qual è la soluzione migliore per impostare il campo di incremento automatico in Oracle? Ho usato questo codice, ma non funziona:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_Sequence") 
@SequenceGenerator(name="id_Sequence", allocationSize=1) 

2 (domanda più importante). C'è un modo per usare un'annotazione univoca per impostare l'auto-incremento che funzionerà sia per MySQL che per Oracle?

risposta

0

1: Se si definisce il proprio generatore, il vostro devono utilizzare l'attributo generatore in @GeneratedValue. E se hai creato la tua sequenza, devi definire il nome con sequenceName altrimenti Hibernate ne creerà uno per te.

@SequenceGenerator(name="some_gen", sequenceName="Emp_Seq") 
@GeneratedValue(generator="some_gen") 

2: Il modo più flessibile (e portatile) è quello di utilizzare la strategia TABLE

@GeneratedValue(strategy=GenerationType.TABLE) 

o più esplicito

@GeneratedValue(generator="some_gen") 
@TableGenerator(name="some_gen", 
    table="ID_GEN", 
    pkColumnName="GEN_NAME", 
    valueColumnName="GEN_VAL") 

Questo genererà (se generazione dello schema è abilitato) una tabella ID_GEN con le colonne GEN_NAME, GEN_VALUE, se la generazione dello schema non è disponibile, devi creare questa tabella da sola.

a trovare informazioni più complete dalla documentazione Hibernate qui: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch05.html#mapping-declaration-id-generator

+0

Grazie per la risposta. Non è necessario usare 'strategy = GenerationType.SEQUENCE' nel tuo primo suggerimento? – hamed

+0

Non penso perché hai definito il tuo generatore come un '@ SequenceGenerator'. –

+0

Ho messo '@SequenceGenerator (name =" some_gen ", sequenceName =" Emp_Seq ") @GeneratedValue (generator =" some_gen ")' sopra il mio id, ma non funziona. Anche '@GeneratedValue (strategy = GenerationType.TABLE)' non funziona. – hamed

Problemi correlati