Java/Hibernate: Wie kann ich einfügen, die einen bestimmten Wert für eine Spalte mit autoincrement / @GeneratedValue
Ich habe eine Tabelle mit einer Spalte id, die autoincrements und ein Java-Objekt mit einem getter versehen mit @GeneratedValue(strategy = GenerationType.AUTO)
. Dies funktioniert beim speichern, allerdings für einen unit-test-ich möchte geben Sie die ID, so dass Sie deterministisch ist. In MySQL (die DB, die wir verwenden) ich kann geben Sie einen Wert in der insert-Anweisung und alles funktioniert einwandfrei. Jedoch wenn ich das Feld id in das java-Objekt und versuchen zu bestehen, hibernate wirft eine Ausnahme. Wie kann ich den Ruhezustand, lassen Sie mich geben Sie einen Wert für eine Regel generierten Wert?
Feld Beispiel:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return this.id;
}
Funktioniert in MySQL:
INSERT INTO myTable (id, str)
VALUES (10,'this works!')
Funktioniert nicht:
MyObject myObject = new MyObject();
myObject.setId(10L); //remove this line and hibernate saves ok
myObject.setStr("this does not work.");
daoForMyObject.persist(myObject); //throws org.springframework.dao.DataIntegrityViolationException
Dank im Voraus für die Hilfe ein guter test-driven-developer!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tut mir Leid, zu beantworten in einer Weise, die Sie wahrscheinlich nicht wollen, aber ich denke, dass deine Idee schlecht ist. Wenn es Ihr Ziel ist, ein guter test-driven-developer, tun das nicht. Sie sind im Grunde sabotieren, was Sie testen möchten. Sie verlangen eine Besondere behaivour aus Ihrem Gerät, wenn Sie unter test. Aber ein unit-test sollte der test der Einheit, wie es ist.
Wenn hibernate würde ermöglichen es Ihnen, einen festen Wert für die autoincrement (oder so) Bereich, dies könnte als ein bug in hibernate. Wie ich es sehe, ist es gut, dass hibernate nicht erlauben.
Warum nicht Lesen Sie den id-Wert nach der
session.save()
Methode nennen? Wahrscheinlich ist deindaoForMyObject.persist()
Anrufesave()
so Recht nach, dass Sie Lesen können die id:Nun verwenden
id
Referenz entity statt 10... warum sollten Sie nicht in der Lage sein, es zu tun auf diese Weise?