如何在Spring Query

时间:2017-07-06 14:58:12

标签: java mysql sql-server spring spring-data-jpa

这是我正确运行的SQL语句:

SELECT cedula FROM paciente INNER JOIN titular ON paciente.id = titular.paciente_id WHERE cedula = '19163676';

当ids匹配

时,

cedula表返回paciente字段

我已阅读此帖:How To Define a JPA Repository Query with a Join

但在那篇文章中,这种关系是一对一的。

在我的情况下,父亲模型为paciente且子模型为titular

的关系为多对一

这是我的Paciente域名:

Paciente.java

@Id
@Column(name="pacienteId")
@SequenceGenerator(name="paciente_id_seq",
    sequenceName="paciente_id_seq",
    allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE,
    generator="paciente_id_seq")
private Long id;

@NotNull
@Column(name = "cedula", nullable = false)
private String cedula;

这是我的Titular域名,关系:

Titular.java

 @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@ManyToOne
@JoinColumn(name="pacienteId")
private Paciente paciente;

这是我的 PacienteRepository.java ,它将包含查询:

public interface PacienteRepository extends JpaRepository<Paciente,Long> {
List<Paciente> findByNombreContainsIgnoreCase(String nombre);
List<Paciente> findByNombreLikeIgnoreCaseAndApellidoLikeIgnoreCase(String nombre, String apellido);
List<Paciente> findByCedula(String cedula);
Page<Paciente> findByCedulaStartsWith(String cedula, Pageable pageable);

}

我该怎么做?

1 个答案:

答案 0 :(得分:1)

已解决(2017-07-06):

JPQL与SQL不一样。 JPQL可以通过实体返回所需的对象(甚至,在不同的Java存储库实体内),不需要内部连接命令。

即:

<强> PacienteRepository.java:

@Query("select titular.paciente from Titular titular where titular.paciente.cedula in ?1")
Page<Paciente> findByCedulaEndsWith(String cedula, Pageable pageable);

当患者的'cedula'(身份证,DNI等)与来自Paciente(患者)表的'cedula'匹配时,患者从Titular table(所有者)返回。否则,返回一个空数组。