Consulta usando subQuerys

2 respostas
S

Pessoal estou precisando fazer uma consulta usando subqueries, entendam o caso:
tenho uma classe com o seguintes atributos:

public class SiloBean implements java.io.Serializable {

    private Long siloId;
    private FornecedorBean fornecedor;
    private MaterialBean material;
    private String siloDesc;
// gets e sets ingnorados

onde tenho que buscar nessa tabela de silos todos que tenham o mesmo forncedor, onde o nome do forncedor recebo como parâmetro, só que tentei usar essa linha abaixo para buscar mias não obtive sucesso:

Criteria criteria = session.createCriteria(SiloBean.class);
  criteria.add(Restrictions.eq("fornecedor.fornDesc", descFornecedor));

alguem sabe como posso fazer essa consulta?

2 Respostas

M

Bom, faça o seguinte

Criteria crit = session.createCriteria(SiloBean.class);
        Criteria suppCrit = crit.createCriteria("fornecedor");
        suppCrit.add(Restrictions.eq("fornDesc", descFornecedor ));
        List results = crit.list();

Segue um tópico que pode te ajudar

http://www.guj.com.br/java/259034-resolvidoproblema-com-uma-consulta-em-criteria-hibernate

Boa sorte

S

Pessoal criei esse método:

public List<SiloBean> findByDescricaoFornecedor(String descFornecedor) {
        Session session = getSession();
        List<SiloBean> toReturnSilo;
        try {
            DetachedCriteria subQuery = DetachedCriteria.forClass(FornecedorBean.class);
            subQuery.add(Restrictions.eqProperty("fornDesc", descFornecedor));
            Criteria criteria = session.createCriteria(SiloBean.class);
            criteria.add(Subqueries.in("fornecedor", subQuery));
            toReturnSilo = criteria.list();
            if (toReturnSilo == null) {
                toReturnSilo = null;
            }
            return toReturnSilo;
        } catch (NonUniqueResultException ex) {
            log.error("Mais de um registro encontrado. Erro: " + ex);
            return null;
        }
    }

Vou testar pra ve se funciona.

Criado 24 de novembro de 2011
Ultima resposta 24 de nov. de 2011
Respostas 2
Participantes 2