JSON POST 的内容请求 Java 中的@ManyToOne 关系 Spring
JSON content for POST request @ManyToOne relationship in Java Spring
我有两个模型:
Class一个:
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
}
Class 很多:
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> {
}
控制器Class:
@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
...
}
注意:以上回答只说明实体关系的设置方法。应该实际调用适当的服务层。
您可以在 One 中保留 1 条记录,在 Many 表中保留多条记录,而您正在使用以下存储库时仅使用单个请求
import com.hotel.model.One;
import org.springframework.data.jpa.repository.JpaRepository;
public interface OneRepository extends JpaRepository<One, Long> {
}
另一方面,您可以使用示例中给出的 JpaRepository 在 One 表中保留 1 条记录,在 Many 表中保留 1 条记录。
你的问题没说清楚,是要持久化One/Many还是检索One/Many。
我有两个模型:
Class一个:
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
}
Class 很多:
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> {
}
控制器Class:
@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
...
}
注意:以上回答只说明实体关系的设置方法。应该实际调用适当的服务层。
您可以在 One 中保留 1 条记录,在 Many 表中保留多条记录,而您正在使用以下存储库时仅使用单个请求
import com.hotel.model.One;
import org.springframework.data.jpa.repository.JpaRepository;
public interface OneRepository extends JpaRepository<One, Long> {
}
另一方面,您可以使用示例中给出的 JpaRepository 在 One 表中保留 1 条记录,在 Many 表中保留 1 条记录。
你的问题没说清楚,是要持久化One/Many还是检索One/Many。