Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在POST时传递到持久化的分离实体_Java_Mysql_Spring_Hibernate_Rest - Fatal编程技术网

Java 在POST时传递到持久化的分离实体

Java 在POST时传递到持久化的分离实体,java,mysql,spring,hibernate,rest,Java,Mysql,Spring,Hibernate,Rest,我正试图在两个表之间添加一个联接,正如我在这个问题中所述: 但是现在我发现了一个新的错误,它指出: detached entity passed to persist: sample.todosapp.spring.domain.User] with root cause 当我尝试调用此代码时(这是我的REST控制器中POST的修改方法): @RequestMapping(方法=POST) @ResponseStatus(HttpStatus.CREATED) 公共可调用帖子(@Request

我正试图在两个表之间添加一个联接,正如我在这个问题中所述:

但是现在我发现了一个新的错误,它指出:

detached entity passed to persist: sample.todosapp.spring.domain.User] with root cause
当我尝试调用此代码时(这是我的REST控制器中POST的修改方法):

@RequestMapping(方法=POST)
@ResponseStatus(HttpStatus.CREATED)
公共可调用帖子(@RequestBody Todo Todo){
用户u=userService.findBySso(SecurityContextHolder.getContext().getAuthentication().getName());
todo.setUser(u);
return()->todoRepository.save(todo);
}

如何在POST期间添加联接?

从关系中删除cascade=CascadeType.ALL
这与POST无关

这是一个hibernate异常,导致异常的原因是您试图持久化的实体对象未处于持久化状态

  • Spring JPA->请检查中启用的事务管理器 持久化JPA配置文件。翻译方法应该是 用@Transactional符号标记

  • 确保您所分配的id(主键)与PersistenceContext中已存在的其他实体中已存在/使用的id(主键)不同

  • 我并不完全理解post和join之间的问题(这是两个完全不同的概念),但是对于您的错误,您需要使用saveOrUpdate()方法
        @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);
    }