Tengo una entidad ElementType que tiene un conjunto de EquipmentCodes:
@Entity @Table(name = "ELEMENT_TYPES") public class ElementType extends AbstractEntity<Long> { @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name= "ELEM_TYPE_ID") private Set<EquipmentCode> equipmentCodes; }Tengo ambas clases expuestas como Rest Resources con repositorios:
@RepositoryRestResource(path = "elementTypes", collectionResourceRel = "elementTypes") @Transactional public interface ElementTypeRepository extends CrudRepository<ElementType, Long> {}Ahora, si pruebo algunas operaciones, como
o envío de PATCH
{ "equipmentCodes" : [ "https://localhost:8080/api/equipmentCodes/40529100" ] }Sin embargo, parece funcionar bien si trato de agregar un nuevo código de equipo a los existentes:
[ { "op": "add", "path": "/equipmentCodes", "value": [ "https://localhost:8080/api/equipmentCodes/40529099" ] } ]yo obtengo
org.hibernate.LazyInitializationException: no se pudo inicializar de forma perezosa una colección, no se pudo inicializar el proxy; no hay sesión, en org.springframework.data.rest.webmvc.json.patch.JsonLateObjectEvaluator.evaluate(JsonLateObjectEvaluator.java:45)
¿Alguna pista sobre cuál es el problema? ¿Hay algún problema con la forma en que uso "agregar" o se trata de la configuración de Spring?
Editar: puede ser un error sintáctico, así no obtengo la excepción:
[ { "op": "add", "path": "/equipmentCodes", "value": "https://localhost:8080/api/equipmentCodes/40529099" } ]Sin embargo, lo que es extraño es que en lugar de agregar el EquipmentCode existente con id 40529099 al ElementType, solo está insertando un nuevo EquipmentCode vacío (por supuesto, estoy enviando el parche a https://localhost:8080/api/elementTypes/40529090 ), eliminando los otros en el conjunto y luego asignando al nuevo el ElementType
Para aclarar, lo que quiero es agregar un EquipmentCode que ya está en la base de datos al conjunto en ElementType, sin eliminar los EquipmentCodes actuales en ese conjunto.