2016-06-29 18 views
0

ich die folgende Störung erhalte:kann nicht JPA entsprechendes Konstruktor auf Klasse lokalisieren

java.lang.IllegalArgumentException: org.hibernate.QueryException: unexpected char: 

SELECT NEW com.classes.applicant.ApplicantEntry(app.indSsn, app.indivName, app.indAddrLocTx,app.indAddrCityNm,app.indAdrStateAb,app.indAddrZipCd, app.phoneNr,app.workPhoneNr) FROM TApplicant app WHERE app.indSsn = :ssn 

Die Klasse Constructor ist richtig:

public ApplicantEntry(String indSsn, String indivName, String indAddrLocTx, String indAddrCityNm, String indAdrStateAb, String indAddrZipCd, 
           String phoneNr, String workPhoneNr) { 
     this.indSsn = indSsn; 
     this.indivName = indivName; 
     this.indAddrLocTx = indAddrLocTx; 
     this.indAddrCityNm = indAddrCityNm; 
     this.indAdrStateAb = indAdrStateAb; 
     this.indAddrZipCd = indAddrZipCd; 
     this.phoneNr = phoneNr; 
     this.workPhoneNr = workPhoneNr; 

    } 

und das Unternehmen:

@Entity 
@Table(name = "T_APPLICANT", schema = "APP") 
public class TApplicant implements Serializable, Applicant { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "IND_SSN", columnDefinition = "CHAR") 
    private String indSsn; 

I verstehe nicht, warum es sich darüber beschwert, erwartet alle Zeichenfolgen, wenn es alle Zeichenfolgen erhält.

Ich führe die Abfrage in Intellij Persistenz-Tool.

Voll Abfrage in Repository:

@Query("SELECT NEW com.classes.applicant.ApplicantEntry(app.indSsn, app.indivName, " 
      +"app.indAddrLocTx,app.indAddrCityNm,app.indAdrStateAb,app.indAddrZipCd, app.phoneNr,app.workPhoneNr) " 
      +"FROM TApplicant app " 
      +"WHERE app.indSsn = :ssn ") 
    ApplicantEntry getApplicantEntry(@Param("ssn") String ssn); 
+0

Es arbeitet jetzt. Habe gerade meinen Cache in meiner IDE geputzt und alles war glücklich. Hasse es, wenn es so ist! – Drew1208

Antwort

1
  1. ApplicantEntry Konstruktor hat 8 Parameter während es nur 6 Felder in der Abfrage sind.

  2. Die Abfrage sieht nicht wie richtige jpa-Abfrage aus. Ich denke, es sollte

    SELECT NEW org.classes.applicant.ApplicantEntry(
        app.indSsn,      
        app.adnlPhysExamCd, 
        app.adnlPhysExamDt, 
        app.adultDepnQy, 
        app.adultDepnQy, 
        app.advRankRsnCd, 
        'placeholder', 
        'placeholder' 
        ) 
    FROM ApplicantEntry app WHERE app.indSnn = :ssn 
    
+0

Nein, ich habe 8, das muss ein Fehler beim Einfügen und Einfügen gewesen sein. Ich korrigiere meinen Kommentar. Ich bekomme immer noch die gleichen Ergebnisse. – Drew1208

+0

@ Drew1208 Versuchen Sie 'COALESCE' Ausdruck für jedes Feld hinzuzufügen, d. H.' App.indSsn' ersetzen durch 'COALESCE (app.indSsn, '')' und so weiter. Manchmal kann Hibernate den entsprechenden Konstruktor nicht finden, wenn in der Ergebnismenge ein Nullwert vorhanden ist. – Evgeny