2015-10-13 29 views
13

Attualmente stiamo usando MySQL come database e usiamoGenerationType.AUTO vs GenerationType.IDENTITY in ibernazione

@Generated Value(strategy = GenerationType.IDENTITY)

Sta funzionando perfettamente a certa situazione abbiamo bisogno di migrare il nostro database per Oracle in quel momento è non funziona correttamente. Se qualcuno sa qual è la differenza attuale dietro a questo e come funziona?

+0

quanto fornitore di ORM si sta utilizzando? –

+0

Hibernate e JPA –

risposta

11

Come potrebbe "funzionare correttamente" (non si definiscono informazioni di base come quello che intendi con quello) con Oracle? Non vedo la pertinenza di AUTO nella tua domanda - che semplicemente lascia a un'implementazione la scelta su cosa vuole utilizzare.

"IDENTITY" (come per JPA javadocs e specifiche - a cosa dovresti riferirti) significa autoincremento. Non esiste un concetto simile in Oracle, eppure c'è in MySQL, SQLServer e pochi altri. Mi aspetto che qualsiasi implementazione decente di JPA possa segnalare un errore anche quando si prova una cosa del genere.

Oracle permetterebbe "SEQUENCE", o "TABLE" strategie da utilizzare però

+1

sì, Come hai detto non c'è alcuna opzione di incremento automatico in oracle.but se utilizzo GenerationType.AUTO il modello sta funzionando per il database Oracle perché se fornisco Auto, il JPA ha automaticamente acquisito il tipo generato in base al database. Grazie per il chiarimento. –

3

Citando Java Persistence/Identity and Sequencing:

Identità sequenziamento utilizza colonne identità speciale nel database per consentire al database per assegnare automaticamente un ID all'oggetto quando viene inserita la sua riga. Le colonne di identità sono supportate in molti database, come ad esempio MySQL, DB2, SQL Server, Sybase e Postgres. Oracle non supporta le colonne IDENTITY ma possono essere simulate mediante l'utilizzo di oggetti sequenza e trigger.

quindi preferisco usare SEQUENZA invece

Gli oggetti sequenza utilizzare oggetti speciali di database per generare ID. Gli oggetti sequenza sono supportati solo in alcuni database, come Oracle, DB2 e Postgres. Di solito, un oggetto SEQUENCE ha un nome, un INCREMENTO e altre impostazioni dell'oggetto di database. Ogni volta che viene selezionato .NEXTVAL, la sequenza viene incrementata dall'INCREMENT.

Esempio:

@Entity 
public class Employee { 
    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMP_SEQ") 
    @SequenceGenerator(name="EMP_SEQ", sequenceName="EMP_SEQ", allocationSize=100) 
    private long id; 
    ... 
} 
Problemi correlati