这是我正确运行的SQL语句:
SELECT cedula FROM paciente INNER JOIN titular ON paciente.id = titular.paciente_id WHERE cedula = '19163676';
从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);
}
我该怎么做?
答案 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(所有者)返回。否则,返回一个空数组。