2016-06-29 4 views
0

Я получаю следующее сообщение об ошибке:Не удалось найти соответствующий конструктор по классу JPA

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 

Класс Constructor является правильным:

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; 

    } 

И сущность:

@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 не понимаю, почему он жалуется, что он ожидает все строки, когда он получает все строки.

Я выполняю запрос в инструменте постоянства intellij.

Полный запрос в 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

Он работает в настоящее время. Просто очистил кеш в моей среде IDE, и все было счастливо. Ненавидь это, когда это так! – Drew1208

ответ

1
  1. ApplicantEntry конструктор имеет 8 параметров, а есть только 6 полей в запросе.

  2. Запрос не похож на правильный запрос jpa. Я думаю, что это должно быть

    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

Нет У меня 8, это, должно быть, ошибка с патчем ans paste. Я исправляю свой комментарий. Я все равно получаю те же результаты. – Drew1208

+0

@ Drew1208 Попытайтесь добавить выражение 'COALESCE' для каждого поля, то есть' app.indSsn' заменить на 'COALESCE (app.indSsn, '')' и так далее. Иногда Hibernate не может найти соответствующий конструктор, если в наборе результатов есть нулевое значение. – Evgeny

Смежные вопросы