Problema com transação [RESOLVIDO]  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
barney
JavaBaby
[Avatar]

Membro desde: 14/06/2007 16:11:57
Mensagens: 85
Localização: Joinville
Offline

Bom dia Pessoal estou com um problema em transações....
tenho uma tela onde possuí um campo obrigatório que é a chave estrangeira...
Quando esse campo estiver vazio e o usuário tentar salvar, ocorre um erro pois esse campo é obrigatório...

DAOFactory



CustoDAO



O erro esperado


javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: entity.EntityCusto.tipocusto
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:219)
at dao.CustoDAO.save(CustoDAO.java:31)


pois eu não posso incluir um custo sem o tipo de custo blz....
Até aí tudo bem...
eu fecho essa tela e entro na tela de tipo de custo para inserir um novo registro

TipoCustoDAO


e quando vou salvar mostra o seguinte erro...

java.lang.IllegalStateException: Transaction already active
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:35)
at dao.TipoCustoDAO.save(TipoCustoDAO.java:22)
at control.ControlTipoCusto.actionPerformed(ControlTipoCusto.java:39)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)


O que eu estou querendo é que salve o tipo de custo após ter dado o erro ao tentar salvar um custo sem o tipo de custo

Agradeço desde já

This message was edited 1 time. Last update was at 21/10/2010 13:51:08

[MSN]
jpjcjbr
JavaBaby

Membro desde: 27/11/2006 01:18:00
Mensagens: 77
Offline

Fala aew barney, tudo bem?

Pelo o que eu to vendo no seu código, quando voce nao preenche o tipo do custo ocorre um erro na linha 5(em.merge(entityTipoCusto); ) ou 7(em.persist(entityTipoCusto); ) da classe custodao e isso faz com que o codigo do commit nunca rode e a transacao fique aberta e quando voce preenche o tipo e tenta salvar novamente a transacao anterior vai continuar aberta e o erro vai ocorrer.

Uma solucao seria tratar a excecao que ocorre ao salvar sem o tipo de custo e fazer a transacao ser terminada no finnaly, sacou?

Por exemplo:



Espero ter ajudado

flws

SCJP 6
SCWCD 5
SCBCD 5
SCEA 5
barney
JavaBaby
[Avatar]

Membro desde: 14/06/2007 16:11:57
Mensagens: 85
Localização: Joinville
Offline

Descobri o erro...
na verdade meu erro foi tentar controlar as exceptions na camada Controler
ao deixar a exception estourar na camada DAO ele termina a transação assim
vou tratar meus erros nessa camada

Agradeço a atenção
[MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team