【发布时间】:2020-03-10 01:55:21
【问题描述】:
晚上好,
我对使用 Hibernate 比较陌生,遇到以下错误:
"message": "org.springframework.web.util.NestedServletException: Request processing failed;
nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist:
com.company.project.data.relational.models.ListsItems; nested exception is org.hibernate.PersistentObjectException:
detached entity passed to persist: com.company.project.data.relational.models.ListsItems",
我有一个从具有嵌套对象的前端发送的 JSON 对象。我试图在 MySQL 的单独表中获取嵌套项,并使用原始对象 ID 建立关系。
以下是 JSON 的示例:
{
"name":"Test",
"type":"App Id List",
"listItems":
[
{
"id":1,
"name":"Test",
"value":" 1"
},
{
"id":2,
"name":"NEW TEST",
"value":" 2"
}
]
}
这是我的列表模型:
@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name = "lists")
public class Lists implements Serializable, OperationalEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(columnDefinition = "char", nullable = false)
private String guid;
private String name;
private String type;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "listItems", orphanRemoval = true)
@Cascade({org.hibernate.annotations.CascadeType.ALL, })
private Set<ListsItems> listItems;
private Date created;
private Date updated;
}
这是我的 ListsItems 模型:
@Getter
@Setter
@Entity
@Table(name = "lists_items")
@NoArgsConstructor
public class ListsItems implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
private String value;
@NaturalId
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "lists_id", referencedColumnName = "id")
private Lists listItems;
}
这里是保存功能:
@PostMapping(value = "/add")
@PreAuthorize("hasRole('ADMIN')")
public @ResponseBody WebResponse<W> create(@RequestBody W webModel) {
D dbModel = asDbModel(webModel);
dbModel.setGuid(UUID.randomUUID().toString());
return WebResponse.success(createWebModelFromDbModel(getDatabaseEntityRepository().save(dbModel)));
}
关于可能导致此错误的任何想法?我进行了一些搜索,但我尝试过的任何其他解决方案都没有成功。
提前致谢!
- 特拉维斯 W.
【问题讨论】:
-
你能告诉我们你是如何保存实体的吗?
-
当然!我把它加到了底部。
-
错误很明显,您正在尝试保存一个明确设置了其标识 ID 的对象。
-
不确定我会称之为“非常清楚”,但可以。除了从嵌套 JSON 中删除 ID 之外,我还可以通过以下建议修复它。
标签: java mysql spring hibernate jpa