java - Hibernate 版本 - 引起:org.hibernate.PersistentObjectException:分离的实体传递给坚持:
问题描述
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private Book book;
这是在商店课上。
在书对象中,有version, id, name
我在创建请求中发送商店对象。
如果我发送
"book": {
"description": "string",
"documentId": 0,
"filterName": "string",
"id": 0,
"isBook": true,
"version": 0
},
这给出了错误:
caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: rally.services.center.domain.book.book
如果我删除版本并发送这个
"book": {
"description": "string",
"documentId": 0,
"filterName": "string",
"id": 0,
"isBook": true
没有错误。
为什么会这样?},
当商店被删除时,书应该被删除并且更新也是CascadeType.ALL
如此orphanRemoval = true
这是它正在保存的地方
Book book = new Book(request.getBook());
Book savedBook = bookRepository.save(book);
它在最后一行给出错误。我没有覆盖保存方法。
在我发送该请求正文后,它是 dto。因此,要将其转换为实体,我使用的是来自 DTO 的:
setDocumentId(bookDTO.getDocumentId());
setDescription(bookDTO.getDescription());
setId(bookDTO.getId());
setVersion(bookDTO.getVersion());
所以我删除了 id 行,现在它可以工作了:
setDocumentId(bookDTO.getDocumentId());
setDescription(bookDTO.getDescription());
setVersion(bookDTO.getVersion());
我不知道为什么,但现在它可以工作了。
它使用 fromdto 进行更新并使用 create so 进行创建,无需为实体设置 id,因为它会创建新的。对于修改,也许我将来可能需要,但现在,我不需要 id。因为我给了商店的 id,所以它会更新里面的书,而不需要 bookid。
解决方案
推荐阅读
- python - 在 Python 字典中操作列表
- python - Python,Xarray:按数组中每个单元格的降序排列变量
- swift - SwiftUI - “容器文字中的预期表达式”
- google-sheets - 谁能告诉我为什么这个查询不起作用?
- asynchronous - 使用 Asyncio + Aiohttp 将一个请求的输出用作下一个请求中的参数
- linux - 创建具有循环依赖关系的共享库的最佳方法是什么?
- azure-cli - 执行“az login”时出现间歇性错误
- python - 如何从 beautifulsoup4 中的标签获取命名空间信息?
- python - 无法通过请求下载 Python3x 中的特定网页
- php - 如何在php中显示多个下拉框