Estou tentando executar a seguinte query com o hibernate, mas observei no console que o SQL não está sendo gerado corretamente!
StringBuffer hql = new StringBuffer();
hql.append(" select gau.id ");
hql.append(" from GroupAndUser as gau ");
hql.append(" ,GroupAuthorization as auth ");
hql.append(" where ");
hql.append(" gau.user.id = :userKey ");
hql.append(" and auth.userGroup = gau.group ");
hql.append(" and ( ");
hql.append(" ( ");
hql.append(" auth.classKey = :classKey ");
hql.append(" and auth.permissionString like :permissionString ");
hql.append(" ) ");
hql.append(" or gau.group.admin = true ");
hql.append(" ) ");
Session sess = PersistenceUtil.getSession(database);
sess.beginTransaction();
try {
Query query = sess.createQuery(hql.toString());
query.setParameter("userKey", userKey);
query.setParameter("classKey", classKey);
query.setParameter("permissionString", "%" + permission + "%");
return query.uniqueResult() != null;
} finally {
sess.getTransaction().rollback();
}
Está gerando o seguinte SQL:
select
groupandus0_.id as col_0_0_
from
SYSPERMISSION groupandus0_,
SYSPERMISSION groupautho1_,
SYSUSER usergroup2_
where
groupandus0_.groupid=usergroup2_.id
and groupandus0_.userid=?
and groupautho1_.groupid=groupandus0_.groupid
and (
groupautho1_.classKey=?
and (
groupautho1_.permissionString like ?
)
or usergroup2_.admin=true
)
Trecho com problema:
and (
(
auth.classKey = :classKey
and auth.permissionString like :permissionString
)
or gau.group.admin = true
)
Note que o hibernate está tirando a condição “groupautho1_.classKey=?” de dentro do parêntesis mais interno.
Será que eu estou fazendo algo incorreto? ou é bug do Hibernate mesmo.
Alguma idéia?
Obrigado.