Array
(
)

Converte sql para Hql

John Lima
|
MVP
    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: 20
    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
    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: 20
    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
    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
    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]