我想在两个实体(也是mysql中的表)之间创建一个OneToOne关系。当我收到发布请求时,我想保存A实体,然后自动保存B实体,因为B中有一列(“ a_id”)是A(“ id_a”)中主键的外键。我该如何映射它们的正确性?

@Table("a_tb")
public class A(){
    @Column(name="id_a")
    private Long idA;
    @OneToOne(mappedBy = "aId", cascade = CascadeType.ALL,
        fetch = FetchType.LAZY, orphanRemoval = true, optional = false)
    private B b;
}
@Table("b_tb")
public class B(){
    @Column(name="id_b")
    private Long idB;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "a_id")
    private Long aId;
}


曾尝试将idA设置为A类型,但是当我调用get方法时,他将循环调用A和B嵌套的A,以此类推。
我只想将A的ID保存在B中,而不是整个对象中,否则当我调用get方法并且循环返回时,他将返回整个对象。
映射正确,而不是B中a_id中值的自动设置。

我期望的是:当我创建A时,B会自动获取A的ID并在我请求保存对象A时将其保存到db中的列(“ id_a”)中。这也应该与delete一起使用(当我删除A时, B也被删除)。
匹配的JSON将是:

{
 "a":{
      "id_a": "value",
     },
 "b":{
      "id_b": "value",
      "a_id": "id_a"
     }
 }


感谢您的建议。

最佳答案

从最初的样子

@OneToOne
@JoinColumn(name = "idA_id")
A a;


将是您需要的更改,

关于java - 带有外键的Hibernate JPA OneToOne关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55590411/

10-09 01:59