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
private EntityManagerFactory emf;
private EntityManager em;
public DAOFactory() {
emf = Persistence.createEntityManagerFactory("kontant");
em = emf.createEntityManager();
tipoCustoDAO = new TipoCustoDAO(em);
custoDAO = new CustoDAO(em);
CustoDAO
public void save(EntityCusto entityCusto) {
EntityTransaction et = em.getTransaction();
et.begin();
if(em.contains(entityCusto)) {
em.merge(entityCusto);
} else {
em.persist(entityCusto);
}
et.commit();
}
O erro esperado
[color=red]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)[/color]
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
public void save(EntityTipoCusto entityTipoCusto) {
EntityTransaction et = em.getTransaction();
et.begin();
if(em.contains(entityTipoCusto)) {
em.merge(entityTipoCusto);
} else {
em.persist(entityTipoCusto);
}
et.commit();
}
e quando vou salvar mostra o seguinte erro…
[color=red]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)[/color]
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á