Hibernate: Wie behebt man „Bezeichner einer Instanz geändert von X nach Y“?
Lesezeit: 3 Minuten
gennad
org.hibernate.HibernateException: identifier of an instance
of org.cometd.hibernate.User altered from 12 to 3
eigentlich meine user Die Tabelle muss ihren Wert wirklich dynamisch ändern, meine Java-App ist multithreaded. Irgendwelche Ideen, wie man es repariert?
Ihre Benutzertabelle muss ihren Wert ändern? Welcher Wert? Die Benutzertabelle enthält vermutlich mehrere Zeilen mit jeweils mehreren Werten …
– Verdienst
14. November 2010 um 20:20 Uhr
from [number] to 0 Bei mir trat auf, wenn ich Live-Objekte speichere, anstatt sie zu aktualisieren.
– Amir Azizkhani
5. Oktober 2020 um 13:01 Uhr
Versuchen Sie, den Eigenschaftsnamen der db-Spalte in Ihrem Modell zu ändern. Ich habe ein ähnliches Problem und löse das Problem in dieser Antwort stackoverflow.com/a/66395423/15293948
– Neuer
27. Februar 2021 um 3:58 Uhr
Ändern Sie irgendwo den Primärschlüsselwert eines Benutzerobjekts? Das solltest du nicht tun. Überprüfen Sie, ob Ihre Zuordnung für den Primärschlüssel korrekt ist.
Wie sehen Ihre Mapping-XML-Datei oder Ihre Mapping-Anmerkungen aus?
Hallo Juha, Sie haben absolut Recht, ich weise dem Benutzerobjekt den Primärschlüssel zu. Vielen dank für Deine Hilfe!
– gennad
15. November 2010 um 4:55 Uhr
Ich hatte etwas zu irgendeinem Problem. Meine Fehlermeldung enthielt .. wurde von 1 auf 1 geändert .. Mein Primärschlüssel war in meiner Entitätsklasse auf lang gesetzt, wurde aber in meiner Zuordnungsdatei int zugeordnet.
– Jonas Geiregat
8. Februar 2012 um 7:46 Uhr
Sie müssen Ihre Entität von der Sitzung trennen, bevor Sie ihre ID-Felder ändern
In meinem Fall war das PK-Feld in hbm.xml vom Typ „Integer“, aber im Bean-Code war es long.
Danke, genau das hatte ich (aber dann Int32 statt Int64).
– Johan Häst
14. November 2012 um 13:42 Uhr
Ich hatte ein ähnliches Problem in Lucee 5: die PK in einer Tabelle war type='numeric' aber das gleiche Feld in einem zusammengesetzten Schlüssel in einer anderen Tabelle hatte das nicht. Hinzufügen type='numeric' zum Feld im zusammengesetzten Schlüssel wurde der Fehler behoben.
– Dave DuPlantis
17. April 2018 um 13:54 Uhr
In meinem Fall unterschieden sich Getter- und Setter-Namen vom Variablennamen.
private Long stockId;
public Long getStockID() {
return stockId;
}
public void setStockID(Long stockID) {
this.stockId = stockID;
}
wo es sein soll
public Long getStockId() {
return stockId;
}
public void setStockId(Long stockID) {
this.stockId = stockID;
}
In meinem Fall habe ich es gelöst, indem ich den @Id-Feldtyp von long auf Long geändert habe.
Ken
Stellen Sie sicher, dass Sie nicht versuchen, dasselbe Benutzerobjekt mehr als einmal zu verwenden, während Sie die ID ändern. Mit anderen Worten, wenn Sie etwas in einer Batch-Operation gemacht haben:
User user = new User(); // Using the same one over and over, won't work
List<Customer> customers = fetchCustomersFromSomeService();
for(Customer customer : customers) {
// User user = new User(); <-- This would work, you get a new one each time
user.setId(customer.getId());
user.setName(customer.getName());
saveUserToDB(user);
}
Ätherisch
In meinem speziellen Fall wurde dies durch eine Methode in meiner Dienstimplementierung verursacht, die die Feder benötigte @Transactional(readOnly = true) Anmerkung. Nachdem ich das hinzugefügt hatte, war das Problem behoben. Ungewöhnlich aber, es war nur eine ausgewählte Aussage.
10183900cookie-checkHibernate: Wie behebt man „Bezeichner einer Instanz geändert von X nach Y“?yes
Ihre Benutzertabelle muss ihren Wert ändern? Welcher Wert? Die Benutzertabelle enthält vermutlich mehrere Zeilen mit jeweils mehreren Werten …
– Verdienst
14. November 2010 um 20:20 Uhr
from [number] to 0
Bei mir trat auf, wenn ich Live-Objekte speichere, anstatt sie zu aktualisieren.– Amir Azizkhani
5. Oktober 2020 um 13:01 Uhr
Versuchen Sie, den Eigenschaftsnamen der db-Spalte in Ihrem Modell zu ändern. Ich habe ein ähnliches Problem und löse das Problem in dieser Antwort stackoverflow.com/a/66395423/15293948
– Neuer
27. Februar 2021 um 3:58 Uhr