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

时间:2017-10-22 05:23:57

标签: 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> {
}

控制器类:

@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_idnull 我可以只使用一个请求来创建新的许多记录并分配给一个记录的id = 1吗? 我是否必须使用2个请求:创建多个并分配给一个?

3 个答案:

答案 0 :(得分:3)

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

@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

    ...

}

注意:上述答案仅说明了设置实体关系的方法。应该实际调用适当的服务层。

答案 1 :(得分:0)

在您使用以下存储库时,您只能使用单个请求在一个中保留1条记录并在多个表中保留多条记录

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

public interface OneRepository extends JpaRepository<One, Long> {
}

另一方面,您可以使用示例中给出的JpaRepository将1条记录保存在Many表中的One和1条记录中。

您的问题不明确,是否要保留一个/多个或检索一个/多个。

答案 2 :(得分:-1)

创建您的&#39;许多&#39;记录一个&#39; One&#39; assign JSON应该如下所示

 {
   "name": "Foo",
   "one":{
   "id": 1
   }
 }