这是我的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表(所有者)返回患者。否则,返回一个空数组。