使用休眠在Spring Boot中检索相关对象?

时间:2019-03-07 03:36:59

标签: java hibernate spring-boot

我有这个“父母”课程:

@Entity
@Table(name = "parent_table")
public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String firstName;
    private String lastName;

    @OneToMany(fetch=FetchType.LAZY, mappedBy = "parent", cascade = {CascadeType.ALL})
    List<Child> children;
 }

而且,我有以下子类:

@Entity
@Table(name = "children")
public class Child {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long childId;

    @ManyToOne
    @JoinColumn(name="parent_id")
    private Parent parent;

    private String name;
}

我也将其作为请求正文发送:

{
        "firstName": "Test",
        "lastName": "Parent",
        "children":[{
                "name":"jack"
            },
            {
                "name":"jill"
            }
        ]

}

好消息是,我可以直接从父存储库中将这些子代写入数据库,但是...当我执行GET以获取父代时,它会在没有子实体的情况下返回(即使它们在数据库中,在其表中)

半有用的更新(MAYBE?):我注意到子记录的数据库中的parent_id字段似乎没有被填充!不知道为什么!

1 个答案:

答案 0 :(得分:0)

您正在使用错误的列名创建关系。

您的父类的 var app = new Vue({ el: '#app', data() { return { permissions: [{ id: 1, name: 'create' }, { id: 2, name: 'edit' }, { id: 3, name: 'delete' } ] } }, computed: { getFormPermissionId() { var permission = this.permissions; //Creating String str = ""; for (let i = 0; i < permission.length; i++) { str += permission[i].id + "\n"; } return str; } } })列定义为:

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">  
  {{getFormPermissionId}}
</div>

这将在您的id表中生成一列@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

您的子类的外键定义为:

id

您表示要在parent表中的 @ManyToOne @JoinColumn(name="parent_id") private Parent parent; 列之间建立关系。这样的列不存在。

如果您希望指示外键列名称必须为parent_id,则必须将其定义为:

parent_id