双向一对一不适用于spring-data-jpa

时间:2019-05-11 00:45:32

标签: hibernate spring-data-jpa spring-data

我在Postgresql中有3个表,其中有3个spring数据实体。 这些是在实体方面名称相同的Parent,Child和Third表。

父表的列名称为col_p,该列与子表的id字段具有外键关系。

我需要两者之间存在双向的OneToOne关系。因此,我创建了如下实体:

父实体:

@Entity
@Table(name="parent")
@NamedQuery(name = "Parent.findAll", query = "SELECT p FROM Parent p")
public class Parent implements Serializable {

     @OneToOne
     @JoinColumn(name = "col_p")
     private Parent parent;
}

子实体:

@Entity
@Table(name="child")
@NamedQuery(name="Child.findAll", query="SELECT c FROM Child c")
public class Child implements Serializable {

    @OneToOne(mappedBy="child")    
    private Parent parent;

    @ManyToOne
    @JoinColumn(name="third_id")
    private Third third;
}

使用该实体定义,当我使用通过spring数据jpa创建的父存储库保存父对象时,它可以正常工作。我可以在父表中看到一条记录。

现在,还有另一个名为Third的实体(如开头所述),其Child实体具有其属性之一,如下所示:

第三实体

@Entity
@Table(name="third")
@NamedQuery(name="Third.findAll", query="SELECT t FROM Third t")
public class Third implements Serializable {

    @OneToMany(mappedBy="third")
    private List<Child> child;

}

问题是,当我使用spring数据jpa来获取名为Third的实体,并希望它从子实体(third-> child-> parent)给我Parent实体时,父实体总是返回为null。 当我从第三张表中使用的ID开始查询表并从子项导航到父项时,父项确实有相应的记录。

我不是完全弄乱了我创建的实体中的关系,而不会为我获取父实体的记录。

请帮助。

0 个答案:

没有答案