Bom dia pessoal tenho a seguinte consulta que fiz no postgresSQL e funciona perfeitamente
select p from seguranca.perfil p
inner join seguranca.sistema s on s.cod_sist = 1
inner join seguranca.perf_usu pu on pu.chave_usuario = ‘C1216879’ AND pu.cod_perfil = p.cod_perfil
mas nao to conseguindo passar pro hibernate, sou iniciante ainda
tentei da seguinte forma mas deu erro.
StringBuffer stb = new StringBuffer();
stb.append(" select p “);
stb.append(” from PefilVO as p “);
stb.append(” inner join SistemaVO s on s.cod_sist = “+ codSist + " “);
stb.append(” inner join UsuarioPerfilVO up on up.chave_usuario = '”+ chaveUsuario + "’ AND up.cod_perfil = p.cod_perfil ");
Voce pode usar as classes especificadas do Hibernate para fazer essa consulta, como a Criteria, Criterion, Projections, etc, onde existem metodos que possibilitam o uso de JOIN´s diversos, alem de comparadores, e funçoes comuns de banco de dados (AVG, SUM, etc)
Inicialmente achei estranho a maneira que vc a montou sua instrução SQL. Particularmente faria desta maneira, pois acredito que te resultaria o mesmo resultado, a menos que eu não tenha entendido seu esquema.
SELECT p.* FROM
seguranca.perfil p,
seguranca.sistema s,
seguranca.perf_usu pu
WHERE
p.cod_sist = s.cod_sist
AND
p.cod_perfil = pu.cod_perfil
AND
s.cod_sist = 1
AND
pu.chave_usuario = 'C1216879';
Esta instrução SQL criada no StringBuffer está bem estranha. Vc está misturando HQL com SQL nativo. Ou vc usa uma coisa ou outra.
Se vc deseja usar SQL nativo vc precisa utilizar:
session.createSQLQuery(sql)
Ao invés de:
session.createQuery(sql);
Um exemplo de uma instrução HQL entre as classes Cliente, Compra e Itens da Compra (Cliente, Compra e ItensCompra).
Cliente—>Compra—>ItensCompra : Cliente faz uma compra e esta compra tem itens.
SELECT c FROM Cliente c
LEFT JOIN FETCH
c.compras cp
LEFT JOIN FETCH
cp.itensCompra ic
WHERE
c.idCliente = :idCliente
AND
cp.idCompra = :idCompra
Observe que compras, itensCompra, idCliente e idCompra são atributos da classe e não o nome do campo na tabela. E os parâmetros :idCliente e :idCompra vc precisa substituir como mostrado abaixo:
Query query = session.createQuery(sql);
query.setLong("idCliente", new Long(105));
query.setLong("idCompra",new Long(28));