POST 时传递的分离实体持续存在

Posted

技术标签:

【中文标题】POST 时传递的分离实体持续存在【英文标题】:Detached entity passed to persist when POST 【发布时间】:2016-06-27 02:33:32 【问题描述】:

正如我在这个问题中所述,我正在尝试在两个表之间添加连接:Adding table joins to existing project causes infinite recursion

但是现在我收到了一个新错误:

detached entity passed to persist: sample.todosapp.spring.domain.User] with root cause

当我尝试调用此代码时(这是在我的 REST 控制器中修改后的 POST 方法):

    @RequestMapping(method = POST)
@ResponseStatus(HttpStatus.CREATED)
public Callable<Todo> post(@RequestBody Todo todo) 
    User u = userService.findBySso(SecurityContextHolder.getContext().getAuthentication().getName());

    todo.setUser(u);
    return () -> todoRepository.save(todo);

如何在 POST 期间添加连接?

【问题讨论】:

我不完全理解 post 和 join 之间的问题(这是两个完全不同的概念),但是对于您的错误,您需要使用 saveOrUpdate() 方法 【参考方案1】:

从关系中删除 cascade = CascadeType.ALL JPA @ManyToOne with CascadeType.ALL

【讨论】:

【参考方案2】:

这与 POST 无关。

它是一个休眠异常,异常的原因是您尝试持久化的实体对象未处于持久化状态。

    Spring JPA -> 请检查启用的事务管理器 持久性 JPA 配置文件。交易方式应该是 用@Transactional 表示法标记。

      确保您没有分配在 PersistenceContext 中已存在的其他实体中已经存在/使用的相同 id(主键)。

【讨论】:

以上是关于POST 时传递的分离实体持续存在的主要内容,如果未能解决你的问题,请参考以下文章

Eclipselink 实体持续存在问题

实体上的休眠预设ID,无法使其持续存在

休眠级联持续存在:执行隔离工作时出错

原则 2:双向关系,在不拥有的情况下添加实体不会持续存在

传递给持久化的休眠分离实体

Symfony 3.4 - 如果在多对多关系上不存在,则持续存在