如何解决如何使用@Query JPA进行内部联接?
我想用@Query JPA进行查询,但我不知道该怎么做。我想返回与一个物种(Especie)的名称(nombre)相对应的所有品种(Variedad)。另外,我想向@Query
添加一个ContainingIgnoreCase家族
public class Familia {
@Id
@GeneratedValue
private Integer id;
private String nombre;
private String linkImagen;
private Date fechaRegistro = new Date();
@Column(length=1000)
private String descripcion;
@Column(insertable = false,updatable = false)
private String dtype;
}
Especie
public class Especie extends Familia {
@GeneratedValue
private Integer diasGerminacionDesde;
private Integer diasGerminacionHasta;
private Integer distEntrePlantas;
private Integer distEntreLineas;
@ManyToOne
private Familia familia;
@JoinTable(name = "especie_mesesSiembra",joinColumns = @JoinColumn(name = "especie_id"),inverseJoinColumns = @JoinColumn(name = "mesSiembra_id"))
@ManyToMany
@OrderBy
private Set<MesSiembra> mesesSiembra = new LinkedHashSet<>();
}
Variedad
public class Variedad extends Especie {
@GeneratedValue
@ManyToOne
private Especie especie;
}
Variedad控制器
@GetMapping(params= {"nombreEspecie"})
public Page<Variedad> listarTodosFiltradoPorNombreEspecie(String nombreEspecie,Pageable pagina) {
return servicio.listarTodosFiltradoPorNombreEspecie(nombreEspecie,pagina);
}
Variedad服务
public Page<Variedad> listarTodosFiltradoPorNombreEspecie(String nombreEspecie,Pageable pagina) {
return repositorio.listarTodosFiltradoPorNombreEspecie(nombreEspecie,pagina);
}
Variedad存储库
public interface VariedadRepositorio extends JpaRepository<Variedad,Integer>{
@Query("select v from Variedad v "
+ "join Especie e"
+ "where v.dtype='Variedad' "
+ "and e.nombre=nombreEspecie"
+ "order by v.nombre asc")
Page<Variedad> listarTodosFiltradoPorNombreEspecie(String nombreEspecie,Pageable pagina);
}
解决方法
如果您正在执行JPA,则不指定加入实体。您只需引用原始实体的相关属性即可。
示例:
@Query("select v from Variedad v "
+ "inner join v.especie e"
+ "where v.dtype='Variedad' "
+ "and e.nombre=nombreEspecie"
+ "order by v.nombre asc")
Page<Variedad> listarTodosFiltradoPorNombreEspecie(String nombreEspecie,Pageable pagina);
要执行不区分大小写的字符串比较,可以使用“ lower”和“ like”
where lower(v.dtype) like lower(concat('%',nombreEspecie,'%'))
我没有测试过,所以可能有错字。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。