Olá caros amigos,
estou aprendendo a utilizar o Hibernate e estou tentando fazer o desafio 16(Refatore as outras classes de teste, AlteracaoDeProduto e RemocaoDeProduto, para utilizar o ProdutoDao) da apostila FJ28 VRaptor e me esta aparecendo um erro quando tento atualizar ou remover um produto.
Bem meu ProdutoDAO está assim:
[code]package br.com.caelum.goodbuy.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.caelum.goodbuy.infra.CriadorDeSession;
import br.com.caelum.goodbuy.modelo.Produto;
public class ProdutoDao {
private final Session session;
public ProdutoDao() {
this.session = CriadorDeSession.getSession();
}
public void salva(Produto produto) {
Transaction tx = session.beginTransaction();
session.save(produto);
tx.commit();
}
public void altera(Produto produto) {
Transaction tx = session.beginTransaction();
session.update(produto);
tx.commit();
}
public void remove(Produto produto) {
Transaction tx = session.beginTransaction();
session.delete(produto);
tx.commit();
}
public List<Produto> listaTudo() {
return this.session.createCriteria(Produto.class).list();
}
}
[/code]
AlteracaoDeProduto:
Session session = CriadorDeSession.getSession();
// carrega o produto do banco de dados
Produto produto = (Produto) session.load(Produto.class, 2L);
produto.setPreco(42.50);
//ProdutoDAO dao = new ProdutoDao();
new ProdutoDao().altera(produto);
}
[color=red]Erro[/color]:
log4j:WARN No appenders could be found for logger (org.hibernate.type.BasicTypeRegistry).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate:
select
produto0_.id as id0_0_,
produto0_.descricao as descricao0_0_,
produto0_.nome as nome0_0_,
produto0_.preco as preco0_0_
from
Produto produto0_
where
produto0_.id=?
Exception in thread "main" org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions
at org.hibernate.proxy.AbstractLazyInitializer.setSession(AbstractLazyInitializer.java:126)
at org.hibernate.engine.StatefulPersistenceContext.reassociateProxy(StatefulPersistenceContext.java:573)
at org.hibernate.engine.StatefulPersistenceContext.unproxyAndReassociate(StatefulPersistenceContext.java:618)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
at org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:742)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:730)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:722)
at br.com.caelum.goodbuy.dao.ProdutoDao.altera(ProdutoDao.java:27)
at br.com.caelum.goodbuy.dao.AlteracaoDeProduto.main(AlteracaoDeProduto.java:24)
RemoveProduto:
package br.com.caelum.goodbuy.dao;
import org.hibernate.Session;
import br.com.caelum.goodbuy.infra.CriadorDeSession;
import br.com.caelum.goodbuy.modelo.Produto;
public class RemocaoDeProduto {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Session session = CriadorDeSession.getSession();
Produto produto = (Produto) session.load(Produto.class, 2L);
new ProdutoDao().remove( produto);
}
}
Erro:
log4j:WARN No appenders could be found for logger (org.hibernate.type.BasicTypeRegistry).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions
at org.hibernate.proxy.AbstractLazyInitializer.setSession(AbstractLazyInitializer.java:126)
at org.hibernate.engine.StatefulPersistenceContext.reassociateProxy(StatefulPersistenceContext.java:573)
at org.hibernate.engine.StatefulPersistenceContext.unproxyAndReassociate(StatefulPersistenceContext.java:618)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:89)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:73)
at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:956)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:934)
at br.com.caelum.goodbuy.dao.ProdutoDao.remove(ProdutoDao.java:33)
at br.com.caelum.goodbuy.dao.RemocaoDeProduto.main(RemocaoDeProduto.java:20)
Alguém me ajuda neste erro por favor?