2016-03-25 3 views
0

Wenn ich versuche zu laufen:Hibernate: Parameterwert stimmt nicht mit erwartetem Typ überein?

List<MappingInstruction> result = emFactory.get() 
      .createQuery("FROM " + MappingInstruction.class.getSimpleName() + " c where c.mapping = :mapping", 
       MappingInstruction.class).setParameter("mapping", mappingInfo.getId()).getResultList(); 

ich:

Dienst Ausnahme Ausführung Aktion "MappingAddAction", java.lang.IllegalArgumentException: Parameterwert [5118] hat nicht Spiel erwartet Typ [com.vernuso.trust.server.domain.clientimport.MappingInfo (n/a)]

ich in Eclipse debuggt und mappingInfo.getId() zurückgibt 5118.

Kann mir bitte jemand helfen zu verstehen, warum es den Typ MappingInfo statt long erwartet?

Ich habe zwei Tabellen wie im Bild unten gezeigt. MappingInfo hat eine Eins-zu-viele-Beziehung mit der MappingInstruction-Tabelle.

enter image description here

Antwort

1

Schauen Sie genau hin:

List<MappingInstruction> result = emFactory.get() 
      .createQuery("FROM " + MappingInstruction.class.getSimpleName() + " c where c.mapping = :mapping", 
       MappingInstruction.class).setParameter("mapping", mappingInfo.getId()).getResultList(); 

Du Abrufen von MappingInstruction Entity. In der Where-Bedingung ist c.mapping vom Typ MappingInfo. Bitte überprüfen Sie den Datentyp der Mapping-Variablen in MappingInstruction Klasse.

Da c.mapping ist vom Typ MappingInfo, aber sie sind vorbei mappingInfo.getId(), die lang ist, die ava.lang. IllegalArgumentException wirft.

So Korrektur ist wie folgt:

List<MappingInstruction> result = emFactory.get() 
       .createQuery("FROM " + MappingInstruction.class.getSimpleName() + " c where c.mapping = :mapping", 
        MappingInstruction.class).setParameter("mapping", mappingInfo).getResultList(); 
+0

Dank Kumpel. Ich habe mich auf den Wert in der Tabelle, d. H. 5118, konzentriert. Nur eine Nebenfrage, wenn Sie antworten könnten: Wie kann ich einen Artikel aus "Ergebnis" entfernen? Ich habe result.remove (executionOrder) versucht; aber es scheint nicht zu funktionieren. – EMM

+0

result.remove (executionOrder) funktioniert nicht !!! Wenn Sie nur aus der Liste, aber nicht aus der Datenbank löschen möchten, können Sie die Liste in eine andere Liste kopieren und dann versuchen, diese Liste zu löschen. – CrawlingKid

+0

Ich möchte den Eintrag aus der Datenbank entfernen. Da ich die Ergebnisliste von Db geholt hatte, hoffte ich, dass das Entfernen von dieser Liste auch die Änderungen in DB widerspiegeln würde. – EMM

Verwandte Themen