Aus heiterem Himmel habe ich im Hibernate "IllegalArgumentException: argument type mismatch" bekommen. Die Hibernate-Entity arbeitete lange und svn-Logs bestätigen, dass der Code intakt ist.
Was könnte der Fall sein?
Hier ist ein Teil der Ausnahme
Übersetzung: Hibernate stellt ein Argument vom falschen Typ bereit, wenn versucht wird, eine Setter-Methode aufzurufen.
Mein erster Schritt wäre, herauszufinden, welcher Setter das ist (z. B. indem Sie die Anwendung in Eclipse debuggen, einen Ausnahmebreakpoint setzen und die Stack-Variablen untersuchen, sobald der Breakpoint erreicht ist).
Bearbeiten: Was ist die Signatur des Setter für die gemappte Eigenschaft qs
? Es sollte ein Set<Q>
sein.
Ich habe davon gehört, dass dies aufgrund der zugrunde liegenden Datenbankfeldänderungen (z. B. Datum bis Zeitstempel) passiert ist. Es könnte sich lohnen, die Änderungen an der Datenbank rückgängig zu machen, wenn Sie in der Lage sind, sie zu testen oder die .hbm-Datei oder die Anmerkungen zu überprüfen, wie es Sands vorgeschlagen hat.
Sie haben also eine Hibernate-Mapping-Datei geändert, ohne die Entity zu ändern? Ich vermute, dass die Eigenschaft qs
schon da war. Aber ist es ein java.util.Set
(wie Sie ein <set>
verwendet haben, um mappe deine Sammlung )?
Die Lösung ist die Verwendung von " addScalar " in Ihrer Abfrageausführung.
Angenommen, Ihre Entität ist ein Benutzer:
%Vor%Anstatt zu tun:
%Vor%Verwenden Sie addScalar:
%Vor%Hinweis : Vor LongType.INSTANCE gab es Hibernate.LONG und Hibernate.STRING (sie sind jetzt veraltet).
Manchmal ist es passiert, wenn die Typen nicht kompatibel sind. Für die MySQL-Abfrage muss die Umwandlung von Casting aus Gründen der Kompatibilität erfolgen.
%Vor%Ich hoffe, dies wird den Leuten helfen, auf das ähnliche Problem mit JPA (JPA-Hibernate für genau) zu stoßen.