Dies ist meine Sender-Entität
%Vor%Wenn ich versuche folgende Abfrage auszuführen:
%Vor%Der folgende Fehler tritt auf:
FEHLER: org.hibernate.property.BasicPropertyAccessor - HHH000123: IllegalArgumentException in Klasse: be.gimme.persistence.entities.Sender, Setter-Methode der Eigenschaft: senderId
FEHLER: org.hibernate.property.BasicPropertyAccessor - HHH000091: Erwarteter Typ: long, tatsächlicher Wert: java.math.BigInteger
Das passiert, weil die senderId in der Klasse Sender tatsächlich eine lange statt einer BigInteger ist (die von Hibernate zurückgegeben wird).
Ich habe mich gefragt, was die beste Vorgehensweise in einem Fall wie diesem ist, sollte ich BigIntegers als ID's verwenden (Scheint ein bisschen Overkill)?
Sollte ich die Abfrageergebnisse manuell in Objekte der Klasse Sender umwandeln (Das wäre schade)? Oder kann ich Hibernate nur long
ids anstelle von BigInteger
s zurückgeben? Oder irgendwelche anderen Ideen?
Ich benutze Spring, Hibernate 4.1.1 und MySQL
Der Standard für ".list ()" im Ruhezustand scheint BigInteger-Rückgabetypen für Numerisch zu sein. Hier ist eine Arbeit:
%Vor% Die Objektdatenbankzuordnung ist falsch. Es gibt eine Casting-Ausnahme, die besagt, dass das Datenbankfeld BigInteger
ist, die Objekteigenschaft jedoch long
.
BigInteger
ist eine spezielle Klasse zum Speichern von unbegrenzten Integer-Werten. Außerdem kann BigInteger
nicht implizit zu long konvertieren.
Um diesen Fehler zu vermeiden, sollte das Datenbankfeld BigInteger
in long
compatible type geändert werden. Ändern Sie es in einen int
Typ, wobei int implizit an long
übergeben werden kann. Siehe BigInteger .
In älteren Versionen von Hibernate können Sie
verwenden %Vor%können Sie auf folgendem Link nachsehen Hier nach der BigInteger-Identity-Generator-Klasse suchen
Tags und Links java biginteger hibernate spring long-integer