我在JPQL查询中传递参数做DTO构造函数时遇到问题。我遇到错误:
由于:org.hibernate.hql.internal.ast.QuerySyntaxException:无法在类[ekoncept.model.dto.PokojDTO]上找到适当的构造函数。预期参数为:int,int,java.lang.String,java.lang.String,int,java.lang.String,int,int,int,java.util.Date,int
我在dao中的JPQL:
@Query("select new ekoncept.model.dto.PokojDTO( \n" +
" p.pokojId, p.pokojNr, p.pokojNazwa, p.pokojOpis, \n" +
" p.pokojtypId, pt.pokojtypNazwa, \n" +
" p.pokojSprzatany, p.pokojRemontowany, \n" +
" m.meldunekId, m.meldunekDataDo, r.rezerwacjaId, \n" +
" :today) \n" +
"from Pokoj p \n" +
"left join Pokojtyp pt on pt.pokojtypId=p.pokojtypId \n" +
"left join Meldunek m on m.pokojId = p.pokojId and m.meldunekAktywny = 1 and :today between m.meldunekDataOd and m.meldunekDataDo \n"+
"left join Rezerwacja r on r.pokojId = p.pokojId and r.rezerwacjaAktywna = 1 and :today = r.rezerwacjaDataOd \n"+
"where (:status is null) or (p.pokojSprzatany = :status) \n" +
"order by p.pokojNazwa"
)
List<PokojDTO> getPokojList(
@Param("status") Integer pokojSprzatany,
@Param("today") Date today);
我的DTO构造函数:
public PokojDTO(
Integer pokojId, Integer pokojNr, String pokojNazwa, String pokojOpis,
Integer pokojtypId, String pokojtypNazwa,
Integer pokojSprzatany, Integer pokojRemontowany,
Integer meldunekId, Date meldunekDataDo, Integer rezerwacjaId,
Date today) {
this.pokojId = pokojId;
this.pokojNr = pokojNr;
this.pokojNazwa = pokojNazwa;
this.pokojtypId = pokojtypId;
this.pokojtypNazwa = pokojtypNazwa;
this.pokojOpis = pokojOpis;
this.pokojSprzatany = pokojSprzatany;
this.pokojRemontowany = pokojRemontowany;
this.meldunekId = meldunekId;
this.meldunekDataDo = meldunekDataDo;
this.rezerwacjaId = rezerwacjaId;
switch (pokojSprzatany) { // status sprzątania
case 0:
statusSprzatania = "Sprawdzony";
break;
case 1:
statusSprzatania = "Brudny";
break;
case 2:
statusSprzatania = "Czysty";
break;
default:
statusSprzatania = "???";
}
if (rezerwacjaId != null && meldunekId != null) { // status pobytu
statusPobytu = "Zmiana";
} else if (meldunekId != null) {
if (meldunekDataDo.equals(today)) {
statusPobytu = "Wyjazd";
} else {
statusPobytu = "Pobyt";
}
} else if (rezerwacjaId != null) {
statusPobytu = "Przyjazd";
} else {
statusPobytu = "Wolny";
}
}
来电:
public List<PokojDTO> getPokojList(Integer pokojSprzatany) {
Date today = sysoperMgr.getToday();
return pokojDao.getPokojList(pokojSprzatany, today);
}
我知道问题是因为构造函数中有“:today”,因为它没有转发给构造函数(为什么?)。 JPQL不支持将参数传递给DTO构造函数吗?是否需要解决该问题,或者是否需要其他语法?