Hibernate gerando SQL errado

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.

Wellington, eu ja tentei fazer isso mas deu na mesma.

Tente inverter

hql.append("  and (                                                  ");             
hql.append("       gau.group.admin = true                            ");   
hql.append("       or (                                              ");   
hql.append("        auth.classKey = :classKey                        ");   
hql.append("        and auth.permissionString like :permissionString ");   
hql.append("       )                                                 ");   
hql.append("      )                                                  ");   

E veja se monta adequadamente.

Aparentemente ele entendeu que a lógica, da forma que foi montada seria indiferente, mas creio que não seja.