3
respostas

DUVIDA SOBRE JOIN FETCH JPQL

Boa noite, tenho uma duvida aqui, já que sabemos que JPQL atende o recurso orientação objetos, então eu poderia fazer select juntando 2 tabelas sem a opção do join fetch? Eu tentei e não consegui. Tenho um select assim.

@SuppressWarnings("unchecked")
    public List<Usuario> lista() {
        return this.manager.createQuery("Select u from Usuario u JOIN FETCH u.perfil").getResultList();
    }

TEntei dessa forma aqui e não foi :(.

@SuppressWarnings("unchecked")
    public List<Usuario> lista() {
        return this.manager.createQuery("Select u from Usuario u u.perfil").getResultList();
    }

Teria como fazer algo assim?

@Entity
@SuppressWarnings("serial")
public class Usuario implements Serializable{


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    private String login;
    private String senha;
    private String confirmarSenha;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "perfil_codigo")
    private Perfil perfil = new Perfil();
@Entity
@SuppressWarnings("serial")
public class Perfil implements Serializable{

    @Id
    @GeneratedValue(strategy =  GenerationType.IDENTITY)
    private Long codigo;
    @Enumerated(EnumType.STRING)
    private NivelDoAcesso nivelAcesso;
    @OneToOne(mappedBy = "perfil")
    private Usuario usuario;
3 respostas

Não sei se entendi muito bem a sua pergunta, mas acho que voce quer recuperar o perfil e o usuário a partir de um usuário, certo?

Então.. voce pode mudar o fetch type de LAZY pra EAGER. Quando voce faz isso, o hibernate tras o objeto e o relacionamento dele na hora de fazer a busca.

da uma olhada: http://www.devmedia.com.br/lazy-e-eager-loading-com-hibernate/29554

Minha duvida é outra, como na JPQL é possivel usar orientação objeto deve ser possivel fazer um select e retornando uma tabela com uma junção a outra tabela que ela tiver relacionada sem fazer o JOIN FETCH.

A questão é que JPQL não retorna tabelas, retorna objetos. Se voce considerar que usuario tem o objeto perfil associado a ele com todos os dados de perfil preenchidos, o resultado é: Voce possui todos os dados que possuiria na junção entre as duas tabelas, só não é uma tabela propriamente dita.