Salve pessoal do Guj
Estou aprendendo JPA e como não poderia ser diferente estou com problemas para usá-lo.
No projeto tenho uma classe Sistema e uma classe Modulo, um Sistema pode ter vários módulos e um módulo pertence a apenas um sistema.
Estou fazendo as rotinas para salvar o módulo e quando crio um selecionando um sistema sem nenhum outro módulo tudo ok, mas se tento inserir um novo módulo num sistema que já tenha módulos, alterar ou excluir o módulo, recebo a exception StackOverflow.
Minhas entidades e meu código para salvar (incluir e atualizar) e excluir estão assim:
public class Modulo implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int cod_modulo;
@ManyToOne(optional = false)
@JoinColumn(name = "cod_sistema", nullable = false)
private Sistema sistema;
private String nome_modulo;
.....
}
@Entity
public class Sistema implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int cod_sistema;
private String nome_sistema;
@OneToMany(mappedBy = "sistema")
private Set<Modulo> modulos;
}
// método usado para salvar e excluir
public void save() {
try {
modulo.setSistema(sistemaService
.findByCod_sistema((Integer) sistemaSelected));
moduloService.save(modulo);
addMessage("frmModulo", "Salvo com sucesso!");
} catch (Exception e) {
addMessage("frmModulo", "Erro!\n" + e.getMessage());
e.printStackTrace();
} finally {
modulo = new Modulo();
sistemaSelected = null;
}
}
public void delete() {
modulo = getFromModel();
try {
moduloService.delete(modulo);
addMessage("frmModulo", "Excluído com sucesso!");
} catch (Exception e) {
addMessage("frmModulo", "Erro!\n" + e.getMessage());
e.printStackTrace();
} finally {
modulo = new Modulo();
sistemaSelected = null;
}
}
// métodos que fazem o serviço sujo
public void delete(Modulo objeto) throws Exception {
EntityManager em;
WebFactory webFactory = new WebFactory();
em = webFactory.getEmf().createEntityManager();
try {
em.getTransaction().begin();
objeto = em.merge(objeto);
em.remove(objeto);
em.getTransaction().commit();
} catch (Exception e) {
em.getTransaction().rollback();
throw e;
} finally {
em.clear();
em.close();
}
}
public void save(Modulo objeto) throws Exception {
EntityManager em;
WebFactory webFactory = new WebFactory();
em = webFactory.getEmf().createEntityManager();
try {
em.getTransaction().begin();
em.merge(objeto);
em.getTransaction().commit();
} catch (Exception e) {
em.getTransaction().rollback();
throw e;
} finally {
em.clear();
em.close();
}
}
Agradeço quem puder me ajudar, estou travado nisso aqui faz um tempo já