seguinte, tenho um relacionamento n:n com atributo entre item e orcamento,
quero fazer a consulta com uma junção entre as 3 tabelas usando sqlNative, em sql puro
eu consigo facilmente, agora em hibernate fica dando pau .
String sql2="select {orcamento.},{item.},{orcamentoItem.*} from orcamento o,item i,orcamento_item oi " +
“where o.cod_orcamento = oi.cod_orcamento and i.cod_item = oi.cod_item;”;
ret = session.createSQLQuery(sql2)
.addEntity(“orcamento”, Orcamento.class)
.addEntity(“item”, Item.class)
.addEntity(“orcamentoItem”,OrcamentoItem.class ).list();
exception é:org.hibernate.exception.GenericJDBCException
Alguém ai tem uma noção de como fazer isso em hibernate ?
Tenta algo assim:
private List buscarDadosEntidade(String camposBuscar, Usuario usuario) {
List retorno = null;
// montando o HQL
StringBuilder hql = new StringBuilder();
hql.append("select ");
hql.append(campos);
hql.append(" from ");
hql.append(pegarClasseEntidadeFacadeManipula().getName());
hql.append(" e ");
hql.append(" where (e.idUnico = ? or e.clientePai.idUnico=?)");
// acerta a ordenação
hql.append(" order by e.");
hql.append(getCampoOrdenacao());
// busca os dados
Query query = HibernateUtil.currentSession().createQuery(hql.toString());
query.setParameter(0, usuario.getCliente().getIdUnico());
query.setParameter(1, usuario.getCliente().getIdUnico());
return query.list();
}
Bom por enquanto tive que apelar para o velho e bom JDBC para colocar
pra rodar isso.
Na documentação do hibernate ele não acha viável utilizar N:N com
composição, mas hora que tiver um tempo vou continuar tentando fazer
essa consulta .
valeu t+.
cara…por experiencia propria…
toda vez q eu tinha alguma dificulade pra fazer consultas, ou mesmo o mapeamento usando o hibernate…
era a modelagem do meu banco q estava errada, não estou falando q eh o seu caso…mas da uma revisada pra ter certeza do q vc esta querendo…
flw
Não vejo outra forma de fazer essa modelagem, já que tem que ser N:N mesmo, e se toda consulta que não conseguir fazer ter que mudar a modelagem, a produtividade acaba.
Mas se alguém souber a solução…