Я пытаюсь выполнить запрос, который требует 4 таблицы:
@Query(value="SELECT e.* FROM erreur e, synop sy, synop_decode sd, station st WHERE e.id_synop = sd.id_synop_decode "
+ "and sd.id_synop_decode = sy.id_synop" + " and DATE(sy.date)= :date and "
+ "sy.id_station = st.id_station and st.id_station= :stationId", nativeQuery=true)
public List<Erreur> recherche(@Param("date") Date date, @Param("stationId") Long stationId);
Этот запрос работает нормально и родной sql, я передаю существующий идентификатор станции и дату, как показано ниже:
SELECT e.* FROM erreur e, synop sy, synop_decode sd, station st WHERE e.id_synop = sd.id_synop_decode and sd.id_synop_decode = sy.id_synop
and DATE(sy.date)= '2019-05-27' and sy.id_station = st.id_station and st.id_station= 60355;
Этот запрос прекрасно работает в Mysql Workbench.
Вот фактический контроллер, который я использую для целей тестирования:
@GetMapping("/station/{stationId}/erreurs/today")
public List<Erreur> getTodayErreurByStationId(@PathVariable Long stationId)
{
List<Erreur> erreurs = new ArrayList<Erreur>();
Optional<Station> stationOptional = stationRepository.findById(stationId);
if(stationOptional.isPresent())
{
return erreurRepository.recherche(new Date(), stationId);
}
return null;
}
Ожидаемые результаты - фактические объекты "Ererur" вмой список массивов, но RestClient просто возвращает пустой массив [], в то время как запрос работает в MySQL, как я описал выше.
Итак, мой вопрос: как я могу написать этот запрос на языке Hql так, чтобыя могу вернуть нужные лица.Или как я могу сопоставить мои результаты sql с моим целевым настраиваемым calss "Erreur"?
@Entity
@Getter @Setter @NoArgsConstructor
@Table(name="erreur")
public class Erreur {
public Erreur(int section, int groupe, String info) {
this.section = section;
this.groupe = groupe;
this.info = info;
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_erreur")
private Long id;
@ManyToOne(cascade= {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},
fetch=FetchType.LAZY)
@JsonIgnore
@JoinColumn(name="id_synop")
private SynopDecode synopDecode;
@OneToOne
@JoinColumn(name="id_controle")
private Controle controle;
@ManyToOne(cascade= {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},
fetch=FetchType.LAZY)
@JsonIgnore
@JoinColumn(name="id_station")
private Station station;
@Column(name="section")
private int section;
@Column(name="groupe")
private int groupe;
@Column(name="info")
private String info;
}