Hibernate - erro na pesquisa

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???

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

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…

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

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

[code]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();
    }
    
}[/code]

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:

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:

gente… me precipitei… :oops:

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

alguém pra dar uma luz??