这是我的SQL语句,可以正常工作:

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

当ID匹配时,从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);


}

我该怎么做?

最佳答案

已解决(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表(所有者)返回患者。否则,返回一个空数组。

10-04 15:30