Hibernate - erro na pesquisa

6 respostas
J

pessoal,

não entendo pq dá erro na linha:
Produto_filial produto_filial = (Produto_filial)criteria.uniqueResult();

public Produto_filial pesquisar (ProdutoFilialPK compositeId) throws HibernateException { Long idProduto = compositeId.getProduto().getId_produto(); Long idFilial = compositeId.getFilial().getId_filial(); this.getSession().beginTransaction(); Criteria criteria = this.getSession().createCriteria(Produto_filial.class); criteria.add(Restrictions.and( Restrictions.eq("id_produto",idProduto), Restrictions.eq("id_filial",idFilial))); Produto_filial produto_filial = (Produto_filial)criteria.uniqueResult(); this.getSession().getTransaction().commit(); return produto_filial; }

o erro:

java.lang.ArrayIndexOutOfBoundsException: 1

at org.hibernate.exception.NestableDelegate.getThrowable(NestableDelegate.java:228)

at org.hibernate.exception.NestableDelegate.getMessage(NestableDelegate.java:147)

at org.hibernate.exception.NestableRuntimeException.getMessage(NestableRuntimeException.java:158)

alguém tem ideia do que está acontecendo???

6 Respostas

Leandro_Carvalho

Por que você acha que esse erro:
"java.lang.ArrayIndexOutOfBoundsException: 1"
Tem a ver com o código que você passou?

J
desculpem-me, mas o stackTrace é o seguinte:

org.hibernate.QueryException: could not resolve property: id_produto of: net.cpadi.model.Produto_filial

at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)

at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38)

at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1375)

at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)

at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1350)

at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:434)

at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:394)

at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:45)

at org.hibernate.criterion.LogicalExpression.toSqlString(LogicalExpression.java:39)

at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:334)

at org.hibernate.loader.criteria.CriteriaJoinWalker.(CriteriaJoinWalker.java:82)

at org.hibernate.loader.criteria.CriteriaLoader.(CriteriaLoader.java:67)

at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550)

at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)

at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)

conferi os id´s e estão corretos…

Guilherme_Gomes

Posta o código da classe Produto_filial (a parte que interessa) e o mapeamento dela!

J

é neste metodo q chamo o pesquisar da classe ProdutoFilialDao q postei anteriormente:

public void pesquisar() {
        try {
            Session session = HibernateUtil.getCurrentSession();
            ProdutoFilialDao produtoFilialDao = new ProdutoFilialDao(session);
            ProdutoDao produtoDao = new ProdutoDao(session);
            FilialDao filialDao = new FilialDao(session);    

            ProdutoFilialPK produtoFilialPK = new ProdutoFilialPK();
            //pesquisa pelo codigo do produto
            Produto produto = produtoDao.pesquisar(codigo);
            produtoFilialPK.setProduto(produto);
            //pesquisa pelo codigo da filial
            Filial filial = filialDao.pesquisar(this.filial); 
            produtoFilialPK.setFilial(filial);
            setProdutoFilialPK(produtoFilialPK);
            
            Produto_filial produtoFilial = produtoFilialDao.pesquisar(chaveComposta);

            if (produtoFilial != null) {
                setProdutoFilial(produtoFilial);
            } else
                MsgUtils.showMsgPesquisa();
            
        } catch (HibernateException ex) {
            //MsgUtils.showError(ex.getMessage(1));
            ex.printStackTrace();
        } finally {
            HibernateUtil.closeCurrentSession();
        }
        
    }

uso hibernate annotations. Criei uma classe com chaves compostas chamada ProdutoFilialPK, pois a relação de produto com filial é de n-n com atributos.
estou iniciando com hibernate annotations... então, qq dica se estou fazendo da maneira correta (sem gambiarras), agradeço. :wink:

J

Gente, resolvi, mas não entendi o porquê…
colocando o try - catch resolveu o problema… :shock:
alguém poderia me explicar o pq?
li em varios lugares q é chato trabalhar com composite id…
o composite id tem a ver com o problema q deu?

a alteração q fiz e q deu certo:

public Produto_filial pesquisar (ProdutoFilialPK compositeId) { Long idProduto = compositeId.getProduto().getId_produto(); Long idFilial = compositeId.getFilial().getId_filial(); Produto_filial produto_filial = null; try { this.getSession().beginTransaction(); Criteria criteria = this.getSession().createCriteria(Produto_filial.class); criteria.add(Restrictions.and( Restrictions.eq("id_produto",idProduto), Restrictions.eq("id_filial",idFilial))); produto_filial = (Produto_filial) criteria.uniqueResult(); this.getSession().getTransaction().commit(); } catch (Exception ex) { ex.printStackTrace(); MsgUtils.showMessage("Erro na pesquisa do produto na filial.", "Pesquisa"); } return produto_filial; }

valeu pela atenção :wink:

J

gente… me precipitei… :oops:

não dá funcionando não… :cry:

alguém pra dar uma luz??

Criado 26 de setembro de 2007
Ultima resposta 27 de set. de 2007
Respostas 6
Participantes 3