Tengo algunas entidades en una one-to-many
relación.
El padre:
@Entity
@Cacheable(false)
@Table(name="form_area")
public class FormArea {
@OneToMany(fetch = FetchType.LAZY, mappedBy="formArea", cascade = { CascadeType.MERGE, CascadeType.PERSIST })
private List<AssignableArea> assignableAreas = new ArrayList<AssignableArea>();
...
}
El niño:
@Entity
@Cacheable(false)
@Table(name="assignable_area")
public class AssignableArea {
private @ManyToOne FormArea formArea;
...
}
El objeto secundario, AssignableArea también tiene captador / definidor en la matriz, FormArea.
Cuando volví a los padres mediante setFormArea()
, al parecer con éxito, en la que la base de datos contiene la información correcta. Pero cuando llamo getAssignableAreas()
en FormArea:
public List<AssignableArea> getAssignableAreas() {
return Collections.unmodifiableList(new ArrayList<>(assignableAreas));
}
Veo la lista de edad, antes de volver a ser padres. ¿Por qué aparece la lista de rancio de edad, cuando espero ver la lista actualizada?
La razón más probable es que ya haya cargado el FormArea
y su lista de assignableAreas
, y sólo informado uno de los lados de la asociación, por lo que el otro se queda secundarios, ya que se ha cargado: es su responsabilidad mantener ambos lados de la asociación si importa para ti.
Si inicia una nueva transacción y volver a cargar el FormArea, la lista contendrá los elementos correctos.