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)
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)
é 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.
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;
}