1
resposta

JOIN EM TABELAS JPQL

Boa tarde, como estão todos ? Tenho uma dúvida relacionada a junção de tabelas usando o JPQL no meu projeto !!! Tenho um entity chamado ProcedimentoCid que faz relação ManyToOne com duas classes, sendo elas : Procedimento e Cid. No meu repositorio de ProcedimentoCid eu gostaria de fazer um select usando JPQL, pra fazer a junção dessas duas classes na minha classe primaria.

Vou soltar o código pra vocês pra ficar melhor de entender e visualizar !!! Grato.

Entidade

package br.com.vozdigital.smart.core.entity;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper=false)
@Entity
@Table(name= "procedimento_cid", schema="cre")
public class ProcedimentoCid extends BaseEntity { 

    private static final long serialVersionUID = -6274979078252383078L;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="pcid_proc_id", referencedColumnName = "id", nullable = false)
    private Procedimento procedimento;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="pcid_cid_id", referencedColumnName = "id", nullable=false)
    private Cid cid;
}

Repositorio

package br.com.vozdigital.smart.data.repository;

import java.util.List;

import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import br.com.vozdigital.smart.core.entity.ProcedimentoCid;

@Repository
public interface ProcedimentoCidRepository extends BaseRepository<ProcedimentoCid, Long> {

    List<ProcedimentoCid> findByProcedimento_Id(@Param("id") Long id);
}

Gostaria de fazer a JPQL retornando o objeto das tabelas sem especificar os campos !!!

1 resposta

Olá Ighor, tudo bem?

Acredito que você possa tentar algo como:

SELECT pc FROM ProcedimentoCid pc 
JOIN pc.procedimento p
JOIN pc.cid c
WHERE p.id = :id
@Query("SELECT pc FROM ProcedimentoCid pc JOIN pc.procedimento p JOIN pc.cid c WHERE p.id = :id")
List<ProcedimentoCid> findByProcedimentoId(@Param("id") Long id);