Sto cercando di capire come funziona Hibernate e sto correndo verso una curva di apprendimento quasi inaccettabile. Non riesco a vedere come ottenere Hibernate per rispettare la politica auto_increment per i miei oggetti. Invece, sovrascrive voci nel database con ID esistenti, a partire da 1.Hibernate non rispettando il campo chiave primaria MySQL auto_increment
Ho una semplice Foo
oggetto, sostenuto da una tabella MySQL definito così:
CREATE TABLE `Foo` (
`fooId` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`fooId`),
)
mi hanno confermato che l'inserimento multiplo Foo oggetti a mano con SQL (insert into Foo values();
) fa la cosa giusta.
classe mia Java ha l'ID specificato utilizzando le annotazioni in questo modo:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="fooId")
private Integer id;
Ho poi eseguire del codice di prova che crea un'istanza semplicemente oggetti Foo e li salva nel database (utilizzando session.save(obj)
). Sembra che usi la propria sequenza di chiavi primarie, iniziando da una, e non guardi la politica chiave della tabella. Sovrascrive quello che c'era.
Ho provato le variazioni sul bit @GeneratedValue
(utilizzando tutte le strategie possibili, escludendo la clausola parentetica). Qualcuno ha persino suggerito di lasciare il GeneratedValue
completamente. Niente sembra funzionare.
Sto lasciando qualcosa fuori? Cosa mi manca? Hibernate è davvero così difficile?
(Se qualcuno ha una soluzione alternativa di persistenza del database Java, si prega di suggerire uno. Sto facendo prototipi, non di lunga durata progetti Mondo-ingegnerizzato.)
+1 per "curva di apprendimento quasi inaccettabile" –
Ditto. Hibernate non è così fluida come lo era EJB2, e molto di questo ha a che fare con gli sviluppatori che si rifiutano di supportare le cose piuttosto che ragioni tecniche. – Zds
Hibernate 5.x non utilizza più IDENTITY quando si specifica GenerationType.AUTO. Invece cerca la tabella hibernate_sequence per il prossimo id. – Mohsen