Array
(
)

Converte sql para Hql

John Lima
|
MVP
Pontos: 5
    16 mai 2017

codigo sql :
select * from papel_funcao pf
inner join funcao f on(f.id = pf.id_funcao)
inner join papel p on(p.id = pf.id_papel)
inner join usuario u on(u.id_papel = p.id)
where u.id = 1
como ficaria se fosse pra hql
extrtura
Usuario tem relacao com papel
Papel Tem relacao com PapelFuncao
PapelFuncao tem relcao Com Funcao

Baltazar
|
MVP
Pontos: 35
    17 mai 2017

Como estão mapeadas as classes? O nome dos atributos e tal...
Seria mais ou menos assim.

select pf from PapelFuncao pf
join Funcao f on pf.idFuncao = f.id
join Papel p on pf.idPapel = p.id
join Usuario u on p.id = u.idPapel
where u.id = 1

John Lima
|
MVP
Pontos: 5
    17 mai 2017

get e set omitidos
#Código

public class PapelFuncao implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;
    @Column(name = "PODE_CONSULTAR")
    private String podeConsultar;
    @Column(name = "PODE_INSERIR")
    private String podeInserir;
    @Column(name = "PODE_ALTERAR")
    private String podeAlterar;
    @Column(name = "PODE_EXCLUIR")
    private String podeExcluir;
    @Column(name = "HABILITADO")
    private String habilitado;
    @JoinColumn(name = "ID_PAPEL", referencedColumnName = "ID")
    @ManyToOne(optional = false)
    private Papel papel;
    @JoinColumn(name = "ID_FUNCAO", referencedColumnName = "ID")
    @ManyToOne(optional = false)
    private Funcao funcao;

}

public class Funcao implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;
    @Column(name = "DESCRICAO_MENU")
    private String descricaoMenu;
    @Column(name = "IMAGEM_MENU")
    private String imagemMenu;
    @Column(name = "METODO")
    private String metodo;
    @Column(name = "NOME")
    private String nome;
    @Column(name = "FORMULARIO")
    private String formulario;

}

public class Papel implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;
    @Column(name = "NOME")
    private String nome;
    @Column(name = "DESCRICAO")
    private String descricao;
    @Column(name = "ACESSO_COMPLETO")
    private String acessoCompleto;

}

public class Usuario implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;
    @Column(name = "LOGIN")
    private String login;
    @Column(name = "SENHA")
    private String senha;
    @Temporal(TemporalType.DATE)
    @Column(name = "DATA_CADASTRO")
    private Date dataCadastro;
    @Column(name = "ADMINISTRADOR")
    private String administrador;
    @JoinColumn(name = "ID_COLABORADOR", referencedColumnName = "ID")
    @ManyToOne(optional = false,fetch = FetchType.LAZY)
    private Colaborador colaborador;
    @JoinColumn(name = "ID_PAPEL", referencedColumnName = "ID")
    @ManyToOne(optional = false)
    private Papel papel;
}

Baltazar
|
MVP
Pontos: 35
    17 mai 2017

veja se funciona.

select pf from PapelFuncao pf
join Funcao f on pf.funcao.id = f.id
join Papel p on pf.papel.id = p.id
join Usuario u on u.papel.id = p.id
where u.id = 1

John Lima
|
MVP
Pontos: 5
    17 mai 2017

já havia testado assim apresenta o seguinte erro :

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select pf from com.chronos.modelo.entidades.PapelFuncao pf join Funcao f on pf.funcao.id = f.id join Papel p on pf.papel.id = p.id join Usuario u on p.id = u.papel.id where u.id = 1]

Alexandro Feltrin
|
MVP
    18 mai 2017

Bom dia John,

Acredito que não tenha o "on" na query, seria algum assim:

select pf from PapelFuncao pf , Usuario u
join pf.Funcao f
join pf.Papel p
where u.id = 1 and u.papel.id = p.id

John Lima
|
MVP
Pontos: 5
    19 mai 2017

could not resolve property: Funcao of: com.chronos.modelo.entidades.PapelFuncao [select pf from com.chronos.modelo.entidades.PapelFuncao pf , com.chronos.modelo.entidades.Usuario u join pf.Funcao f join pf.Papel p where u.id = 1 and u.papel.id = p.id]