Em um projeto JavaFx tenho uma entity documento com uma lista de tecnicos assinantes
Documento.java
@OneToMany(mappedBy = "documento", cascade = CascadeType.ALL)
private List<TecnicoAssinante> assinantes = new ArrayList<>();
public void adicionarTecnicoAssinante(TecnicoAssinante assinante){
assinante.setDocumento(this);
this.assinantes.add(assinante);
}
TecnicoAssinante.java
@ManyToOne
private Documento documento;
public void setDocumento(Documento documento) {
this.documento = documento;
}
Ao salvar o item documento com os itens já adicionados tudo funciona perfeitamente
public void Salvar() {
try{
EntityManager em = JPAService.getEntityManager();
DocumentoDaoJDBC documentoDaoJDBC = new DocumentoDaoJDBC(em);
em.getTransaction().begin();
for (FXMLLoader fxml : Application.getFxmlLoaders()){
if (fxml.getController() instanceof Salvar){
((Salvar) fxml.getController()).salvar();
}
}
if (Application.getDocumento().getId() == null){
documentoDaoJDBC.insert(Application.getDocumento());
}else {
documentoDaoJDBC.update(Application.getDocumento());
}
em.getTransaction().commit();
em.close();
} catch (Exception e) {
Alerts.showAlert("Falha", "Falha ao salvar dados", e.getMessage(), Alert.AlertType.ERROR);
}finally {
Alerts.showAlert(null, null, Application.getDocumento().getAssinantes().toString(), Alert.AlertType.INFORMATION);
reload();
}
}
@Override
public void insert(Documento documento) {
try{
em.persist(documento);
Alerts.showAlert("Sucesso", Application.getNovaTela().getTitulo() + " incluído com sucesso", null, Alert.AlertType.INFORMATION);
}catch (Exception e){
Alerts.showAlert("Falha ao incluir auto", "Houve uma falha na inclusão do auto/termo\nSe o problema persistir contate o suporte técnico", e.getMessage(), Alert.AlertType.WARNING);
}finally {
em.close();
}
}
@Override
public void update(Documento documento) {
try{
em.merge(documento);
Alerts.showAlert("Sucesso", "Auto/termo foi atualizado com sucesso!", null, Alert.AlertType.INFORMATION);
} catch (EntityNotFoundException e) {
Alerts.showAlert("Não encontrado", "Auto/termo não encontrado", e.getMessage(), Alert.AlertType.WARNING);
} catch (Exception e) {
Alerts.showAlert("Falha ao deletar", "Houve uma falha ao atualizar auto/termo\nSe o problema persistir contate o suporte técnico", e.getMessage(), Alert.AlertType.WARNING);
}finally {
}
}
Porem, ao adicionar outros técnicos em um documento previamente salvo os novos técnicos assinantes não recebem id passando a duplicar os itens no banco a cada novo "update" de documento.
Como solucionar esse problema?