【发布时间】:2019-10-13 08:47:00
【问题描述】:
我正在尝试执行需要 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 中运行良好,我传递了一个现有的 stationId 和一个日期,如下所示:
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;
}
【问题讨论】:
-
请显示
SynopDecode和Synop之间的关系 -
你能在没有 Date 参数的情况下运行它吗?日期平等可能无法达到您的预期。
标签: sql spring-boot jpa spring-data-jpa hql