java - Java Spring 中 POST 请求@ManyToOne 关系的 JSON 内容

标签 java spring hibernate jpa many-to-one

我有两个模型:
第一类:

import javax.persistence.*;
import java.util.Set;

@Entity
public class One {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    @OneToMany(mappedBy = "one")
    private Set<Many> manySet;

    //Constructor, Getter and Setter
}

很多类:

import javax.persistence.*;

@Entity
public class Many {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    @ManyToOne
    @JoinColumn(name = "one_id")
    private One one;
    //Constructor, Getter and Setter
}

存储库:

import com.hotel.model.Many;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ManyRepository extends JpaRepository<Many, Long> {
}

Controller 类:

@RestController
@RequestMapping(value = "many")
public class ManyController {
    @Autowired
    private ManyRepository manyRepository;

    @GetMapping
    @ResponseBody
    public List<Many> getAllMany() {
        return manyRepository.findAll();
    }

    @PostMapping
    @ResponseBody
    public ResponseEntity createMany(@RequestBody Many many) {
        return new ResponseEntity(manyRepository.save(many), HttpStatus.CREATED);
    }
}

我创建了一个 id=1 的记录。 但是当我使用 JSON 数据创建 Many 记录时:

{
    "name": "Foo",
    "one_id": 1
}

我收到很多one_id的记录是null
我可以只使用一个请求来创建新的多条记录并分配给一个记录有 id = 1 吗? 我是否必须使用 2 请求:创建多个并分配给一个?

最佳答案

你必须像这样更新你的方法

@PostMapping
@ResponseBody
public ResponseEntity createMany(@RequestBody ManyDTO many) {
    
    One one = oneRepository(many.getOne_id()); //Get the parent Object
    
    Many newMany  = new Many(); //Create a new Many object
    newMany.setName(many.getName());
    newMany.setOne(one); // Set the parent relationship
    
    
    ...

}

注意:上面的回答只是说明了设置实体关系的方法。应实际调用适当的服务层。

关于java - Java Spring 中 POST 请求@ManyToOne 关系的 JSON 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46870767/

相关文章:

java - 如何处理 UsernameNotFoundException spring security

java - Spring Data JPA、Hibernate、@ManyToOne(fetch=FetchType.LAZY) 和 org.hibernate.LazyInitializationException : could not initialize proxy - no Session

java - 在 Spring MVC + Hibernate 应用程序中的某个类中获取方言

java - 如何模拟对象指针

java - 测试客户端/服务器与应用引擎的交互

java - 如何将属性值注入(inject)过滤器?

java - 如何根据Hibernate的@Any中的值计算@MetaValue的entityTarget?

java - 了解Java按值传递的概念吗?

Java:如何使用扫描仪加载文件?

java - 在 Spring 2.5 中注册关闭钩子(Hook)