Ich versuche zu lernen, wie Hibernate funktioniert, und ich renne in eine fast inakzeptable Lernkurve. Ich kann nicht erkennen, wie Hibernate die Richtlinie auto_increment für meine Objekte einhalten kann. Stattdessen wird es Einträge in der Datenbank mit vorhandenen IDs überschrieben wird, beginnend mit 1.Hibernate nicht respektieren MySQL auto_increment Primärschlüssel Feld
Ich habe eine einfache Foo
Objekt, durch eine Tabelle wie folgt definiert MySQL unterstützt:
CREATE TABLE `Foo` (
`fooId` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`fooId`),
)
ich, dass das Einfügen mehrerer bestätigt haben Foo Objekte von Hand mit SQL (insert into Foo values();
) macht das Richtige.
Meine Java-Klasse hat die ID mit Anmerkungen wie folgt angegeben:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="fooId")
private Integer id;
ich dann einige Test-Code auszuführen, die Foo Objekte einfach instanziert und speichert sie in der Datenbank (mit session.save(obj)
). Es scheint, dass es eine eigene Primärschlüsselsequenz verwendet, die mit eins beginnt, und nicht auf die Schlüsselrichtlinie der Tabelle schaut. Es überschreibt was auch immer da war.
Ich habe versucht, Variationen über das @GeneratedValue
Bit (unter Verwendung aller möglichen Strategien, die parenthetical Klausel verlassen). Jemand schlug sogar vor, die GeneratedValue
ganz wegzulassen. Nichts scheint zu funktionieren.
Verlasse ich etwas? Was vermisse ich? Ist Hibernate wirklich so schwer?
(Wenn jemand eine alternative Java Datenbankpersistenz Option hat, bitte ein vorschlagen. Ich Prototypen mache, nicht dauerhafte mondo-engineered Projekten.)
+1 für "fast inakzeptable Lernkurve" –
Dito. Hibernate ist nicht so flüssig wie EJB2, und viel davon hat mit Entwicklern zu tun, die sich weigern, Sachen zu unterstützen, als technische Gründe. – Zds
Hibernate 5.x verwendet IDENTITY nicht mehr, wenn Sie GenerationType.AUTO angeben. Stattdessen wird nach der Tabelle hibernate_sequence für die nächste ID gesucht. – Mohsen