Estou fazendo uma API EM JAVA + Hibernate + Postgres, para ser consumida pelo meu front-end (Angular) e uma das classes possui uma associação @OneToMany com outra, porém quando edito/atualizo uma entidade, seus associados/filhos não atualizam. Sendo que já estou usando cascadeType.ALL que até onde eu intendi deveria atualizar não só aquela entidade mas as associadas a ela. Quando eu cadastro a entidade "pai" sem ter as entidades filhas cadastradas, ela cadastrada as entidades filhas primeiro antes de cadastrar a entidade pai. O relacionamento é ListaEventos e eventos. Sendo que uma ListaEventos tem varios eventos.Classe ListaEventos.
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
@Table(name = "lista_eventos", schema = "public")
public class ListaEventos implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String gameMaster;
private Date dataEvento;
private boolean checked;
@Ignore
public Long codigoUsuario;
@OneToMany(cascade = CascadeType.ALL,
mappedBy = "listaEventos",
orphanRemoval = true)
private List<Evento> eventos;
@OneToOne(fetch = FetchType.EAGER)
private Usuario usuario;
public void associar() {
for (Evento evento : eventos) {
evento.setListaEventos(this);
}
}
public void atualizarAssociacao(ListaEventos listaEventosAtualizada) {
for (Evento evento : listaEventosAtualizada.getEventos()) {
evento.setListaEventos(listaEventosAtualizada);
}
}
}
@Table(name = "eventos", schema = "public")
public class Evento implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String player;
private String nome;
private Integer premiacao;
private String printUrl;
@ManyToOne
@JsonIgnore
private ListaEventos listaEventos;
}
Quando é um @POST funciona o cadastro tranquilamente, mas quando é um @PUT meu front-end envia exatamente o que é pedido, porém o relacionamento não atualiza a entidade filha (evento), como eu faço para atualizar ela?
Tentei atualizar dessa forma, só atualizou da entidade pai da relação, no caso
ListaEventos.
public ListaEventos atualizar(Long id, ListaEventos
listaEventosAtualizada){
ListaEventos listaEventos = findById(id);
listaEventos.setChecked(listaEventosAtualizada.isChecked());
listaEventos.setDataEvento(listaEventosAtualizada.getDataEvento());
listaEventos.setGameMaster(listaEventosAtualizada.getGameMaster());
em.merge(listaEventos);
return listaEventos;
}