Essa exceção ocorre quando você tenta salvar um objeto que possui relacionamento com outro e, este outro ainda não foi persistido.
Exemplo, pense que o objeto a da classe A possui um atributo b que é objeto da classe B. Como b agrega o objeto a (ou o compõe), ele precisa ser persistido antes do momento em que você tente salvar o objeto a.
public class B{
//atributos
//getters e setters
}
public class A{
private B b;
//getters e setters
}
Se você não salvar o objeto de B ou não mudar o cascade de A, continuará ter problemas.
G
Geeh_All
drsmachado
um produto contem um demolo
mais eu estou fazendo busca no banco, como disse acima um select com ajax
esta regra tbm se aplica?
qual tipo de cascate vc me indica ausar?
drsmachado
Então existe um problema bem sério aí no teu sistema, pois, select não deveria fazer update/insert, que é o que dispara o erro que você está tendo.
G
Geeh_All
drsmachado vo colocar o codigo pra vc ter uma visão maior od meu problema
packagevisao;importimplementacoes.InterfaceBean;importjava.io.Serializable;importjava.util.ArrayList;importjava.util.List;importjava.util.logging.Logger;importjavax.annotation.PostConstruct;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.RequestScoped;importorg.primefaces.event.FlowEvent;importorg.primefaces.event.RowEditEvent;importdao.ClienteDao;importdao.DefeitoDao;importdao.MarcaDao;importdao.ModeloDao;importdao.ProdutoDao;importentidade.Cliente;importentidade.Defeito;importentidade.Marca;importentidade.Modelo;importentidade.Processo;importentidade.Produto;@ManagedBean(name="processobean")@RequestScopedpublicclassProcessoBeanimplementsSerializable,InterfaceBean{/** * */privatestaticfinallongserialVersionUID=8197375602768731410L;privateMarcamarcaSelecionada;privateProdutoprodutoSelecionado;privateClienteclienteSelecionado;privateModelomodeloSelecionado;privateClientecliente=newCliente();privateDefeitodefeitoSelecionado;privateProcessoprocesso=newProcesso();privatestaticLoggerlogger=Logger.getLogger(ProcessoBean.class.getName());privateList<Object>listaCliente;privateList<Object>listaDefeito;privateList<Object>listaModelo;privateList<Object>listaMarca;privateList<Object>listaProduto;privatebooleanskip;@PostConstructpublicvoidinit(){listaMarca=newMarcaDao().listaMarca();}publicList<Object>produtoMarca(){if(listaProduto==null){listaProduto=newProdutoDao().produtoMarca(marcaSelecionada);}returnthis.listaProduto;}publicList<Object>modeloProduto(){if(listaModelo==null){listaModelo=(ArrayList<Object>)newModeloDao().modeloProduto(produtoSelecionado);}returnlistaModelo;}publicList<Object>defeitoProduto(){listaDefeito=(ArrayList<Object>)newDefeitoDao().defeitoProduto(produtoSelecionado);returnlistaDefeito;}publicList<Object>listarObject(){returnnull;}@OverridepublicObjectprepararAdicionarObject(){// TODO Auto-generated method stubreturnnull;}@OverridepublicvoideditObject(RowEditEventevent){// TODO Auto-generated method stub}@OverridepublicStringdeleteObject(RowEditEventevent){// TODO Auto-generated method stubreturnnull;}@OverridepublicvoidsaveObject(){processo.setDefeito(defeitoSelecionado);}publicStringonFlowProcess(FlowEventevent){logger.info("Current wizard step:"+event.getOldStep());logger.info("Next step:"+event.getNewStep());if(skip){skip=false;//reset in case user goes back return"confirm";}else{returnevent.getNewStep();}}publicList<Object>getListaCliente(){if(listaCliente==null){listaCliente=(ArrayList<Object>)newClienteDao().listaCliente();}returnthis.listaCliente;}publicvoidsetListaCliente(List<Object>listaCliente){this.listaCliente=listaCliente;}publicList<Object>getListaDefeito(){if(listaDefeito==null){listaDefeito=(ArrayList<Object>)newDefeitoDao().listaDefeito();}returnthis.listaCliente;}publicList<Object>getListaModelo(){if(listaModelo==null){listaModelo=(ArrayList<Object>)newModeloDao().listaModelo();}returnthis.listaModelo;}publicvoidsetListaDefeito(List<Object>listaDefeito){this.listaDefeito=listaDefeito;}publicvoidsetListaModelo(List<Object>listaModelo){this.listaModelo=listaModelo;}publicProcessogetProcesso(){returnprocesso;}publicDefeitogetDefeitoSelecionado(){returndefeitoSelecionado;}publicvoidsetDefeitoSelecionado(DefeitodefeitoSelecionado){this.defeitoSelecionado=defeitoSelecionado;}publicvoidsetProcesso(Processoprocesso){this.processo=processo;}publicClientegetClienteSelecionado(){returnclienteSelecionado;}publicvoidsetClienteSelecionado(ClienteclienteSelecionado){this.clienteSelecionado=clienteSelecionado;}publicbooleanisSkip(){returnskip;}publicvoidsetSkip(booleanskip){this.skip=skip;}publicClientegetCliente(){returncliente;}publicvoidsetCliente(Clientecliente){this.cliente=cliente;}publicModelogetModeloSelecionado(){returnmodeloSelecionado;}publicvoidsetModeloSelecionado(ModelomodeloSelecionado){this.modeloSelecionado=modeloSelecionado;}publicMarcagetMarcaSelecionada(){returnmarcaSelecionada;}publicvoidsetMarcaSelecionada(MarcamarcaSelecionada){this.marcaSelecionada=marcaSelecionada;}publicProdutogetProdutoSelecionado(){returnprodutoSelecionado;}publicvoidsetProdutoSelecionado(ProdutoprodutoSelecionado){this.produtoSelecionado=produtoSelecionado;}publicstaticLoggergetLogger(){returnlogger;}publicstaticvoidsetLogger(Loggerlogger){ProcessoBean.logger=logger;}publicList<Object>getlistaMarca(){returnlistaMarca;}publicvoidsetListaMarca(List<Object>listaMarca){this.listaMarca=listaMarca;}publicList<Object>getListaProduto(){returnlistaProduto;}publicvoidsetListaProduto(List<Object>listaProduto){this.listaProduto=listaProduto;}}
e meu Dao de modelo
packagedao;importjava.io.Serializable;importjava.util.List;importorg.hibernate.Criteria;importorg.hibernate.Query;importorg.hibernate.Session;importorg.hibernate.Transaction;importorg.hibernate.criterion.Restrictions;importconexao.Conexao;importentidade.Modelo;importentidade.Produto;/** * Classe dao do Usuario ele gera uma lista de todos os usuarios cadastrados no banco e procura um usuario especifico. * Como faz conexão com o banco e sai da JVM implementa Serializable. * @author Rangel * @version 1.0 * @since 25/09/2012 * @see java.lang.Object * @see java.io.Serializable */publicclassModeloDaoimplementsSerializable{/** *numero gerado aleatoriamente pela Serializable *@serial serialVersionUID */privatestaticfinallongserialVersionUID=1393220123258638465L;privatefinalSessionsession;/** * construtor ObjectDao instacia um objeto session com uma nova conexão */publicModeloDao(){this.session=Conexao.getSession();}/** * Criar uma lista de marca e a preenche com os dados do banco * @return listausuario lista de usuarios ja preenchida */publicList<Object>listaModelo(){Transactiontx=session.beginTransaction();Queryquery=session.createQuery("FROM Modelo");@SuppressWarnings("unchecked")List<Object>listaModelo=query.list();session.close();tx.commit();returnlistaModelo;}/** * Recebe um id por parametro e busca o respectivo Usuario no banco de dados. * @param id o id */publicModelofind(longid){return(Modelo)session.load(Modelo.class,id);}publicList<Object>modeloProduto(Produtoproduto){Criteriacrit=this.session.createCriteria(Modelo.class);crit.add(Restrictions.eq("produto",produto));@SuppressWarnings("unchecked")List<Object>listaModeloProduto=crit.list();returnlistaModeloProduto;}}
ErickRAR
No lista modelo você está dando um commit na transação e não precisa disso. E pior, está tentando fazer isso após fechar a sessão.
G
Geeh_All
mais isto eu fiz so pra desencargo de consciência, eu ja tinha tentado do modo normal e persssitiu o erro
fiz isto sei la , pra tentar