Spring 弹簧靴支架是一对一柱还是放?

Spring 弹簧靴支架是一对一柱还是放?,spring,spring-boot,hibernate,rest,spring-rest,Spring,Spring Boot,Hibernate,Rest,Spring Rest,我正在开发SpringBootRESTAPI,现在我遇到了一些逻辑问题 所以我有一个实体“A”,它与实体“B”有一对一的关系。 最初,实体“A”与实体“B”一起过帐(>因此关系为空) 因此,当我想添加实体“B”时,我应该简单地发布它,还是用实体“B”放置/修补实体“A”?使用ORM(如Hibernate和POST/PUT/PATCH)将实体持久化到数据库中,这两者之间没有关系,后者是HTTP动词。请不要弄糊涂了 假设将实体A和B定义为一对一的双向关联(默认情况下,关联的(在本例中为一对一)opt

我正在开发SpringBootRESTAPI,现在我遇到了一些逻辑问题

所以我有一个实体“A”,它与实体“B”有一对一的关系。 最初,实体“A”与实体“B”一起过帐(>因此关系为空)


因此,当我想添加实体“B”时,我应该简单地发布它,还是用实体“B”放置/修补实体“A”?

使用ORM(如
Hibernate
POST/PUT/PATCH
)将实体持久化到数据库中,这两者之间没有关系,后者是
HTTP
动词。请不要弄糊涂了

假设将实体A和B定义为一对一的双向关联(默认情况下,关联的(在本例中为一对一)
optional
属性为true):

以及如下所示的假设和假设:

public interface ARepository extends CrudRepository<A, Long> {

}

public interface BRepository extends CrudRepository<B, Long> {

}
后来:

@Autowired
private BRepository bRepository;

B b = new B();
bRepository.save(b);
等效的SQL:

insert 
into
    a
    (id) 
values
    (?)

insert 
into
   b
    (id) 
values
    (?)
注:
如果实体已经存在,
save
将执行
update
而不是
insert
,但由于我们使用的是自动生成的id,因此它将始终执行
insert

考虑实体的A和B,并使用firstName和lastName字段:

@Entity
public class A {

    @Id
    private Integer id;

    private String firstName;

    @OneToOne(mappedBy = "a")
    private B b; 
}

@Entity
public class B {

    @Id
    private Integer id;
 
    private String lastName;

    @OneToOne
    private A a;
}
存储库包括:

@Repository 
 public interface ARepo extends JpaRepository<A,Integer> {
}
@Repository
 public interface BRepo extends JpaRepository<B,Integer> {
}
保存B实体的控制器:

 @PostMapping("/saveB")
 public String save(@RequestBody B b){
    bRepo.save(b);
    return "ok";
 }
和用于保存B实体的json:

 @PostMapping("/saveB")
 public String save(@RequestBody B b){
    bRepo.save(b);
    return "ok";
 }
{ “id”:1, “姓氏”:“xyz”, “a”:{ “id”:1 } }

根据我的理解,如果我们从B存储库保存实体,我们需要使用@PostMapping(插入新行),或者我们可以使用a存储库来保存B实体,因为这里的映射是双向的,通过使用@PutMapping(数据库中已经存在一个数据,我们需要通过添加B的数据来更新它)

@PostConstruct
void init(){
    A a = new A(1,"ABCD");
    aRepo.save(a);
}
 @PostMapping("/saveB")
 public String save(@RequestBody B b){
    bRepo.save(b);
    return "ok";
 }