Her*_*iaz 5 rest spring patch lazy-loading hateoas
我有一个实体 ElementType,它有一组 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;
}
Run Code Online (Sandbox Code Playgroud)
我将这两个类公开为具有存储库的休息资源:
@RepositoryRestResource(path = "elementTypes", collectionResourceRel = "elementTypes")
@Transactional
public interface ElementTypeRepository extends CrudRepository<ElementType, Long> {}
Run Code Online (Sandbox Code Playgroud)
现在如果我尝试一些操作,比如
或 PATCH 发送
{
"equipmentCodes" : [
"https://localhost:8080/api/equipmentCodes/40529100"
]
}
Run Code Online (Sandbox Code Playgroud)
然而,如果我尝试向现有设备添加新的设备代码,它似乎工作正常:
[
{
"op": "add",
"path": "/equipmentCodes",
"value": [
"https://localhost:8080/api/equipmentCodes/40529099"
]
}
]
Run Code Online (Sandbox Code Playgroud)
我明白了
org.hibernate.LazyInitializationException:无法延迟初始化集合,无法初始化代理 - 无会话,位于 org.springframework.data.rest.webmvc.json.patch.JsonLateObjectEvaluator.evaluate(JsonLateObjectEvaluator.java:45)
关于问题是什么的任何提示吗?我使用“add”的方式有问题还是Spring配置有问题?
编辑:这可能是一个语法错误,像这样我没有得到例外:
[
{
"op": "add",
"path": "/equipmentCodes",
"value": "https://localhost:8080/api/equipmentCodes/40529099"
}
]
Run Code Online (Sandbox Code Playgroud)
然而奇怪的是,它不是将 id 为 40529099 的现有 EquipmentCode 添加到 ElementType,而是只是插入一个新的空 EquipmentCode(当然,我将补丁发送到https://localhost:8080/api/elementTypes/40529090 ),删除集合中的其他元素,然后将新元素指定为 ElementType
为了澄清,我想要的是将数据库中已有的一个 EquipmentCode 添加到 ElementType 中的集合中,而不删除该集合中的当前 EquipmentCodes。
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |