当前位置: 首页 > 面试题库 >

Spring Data JPA中的一对多关系

商同化
2023-03-14
问题内容

我想在两个实体(消费者和政策)之间建立一对多关系。一个消费者应该有几项政策。

这是我希望拥有的Consumer JSON对象的示例:

{
     id : 1,
     name : "Peter",
     endpoint: "123.456.778",
     policies: [
                    {
                       id : 1,
                       name: "policy 01"
                    },
                    {
                       id : 2,
                       name: "policy 02"
                    }
             ]
}

这是我到目前为止所拥有的:

政策实体

@Entity
public class Policy {
        @Id
        @GeneratedValue
        @Column(name = "id")
        private Integer id;

        @Column(name = "name")
        private String name;

        //getters and setters
    }

消费者实体

@Entity
public class Consumer {

    @Id
    @GeneratedValue
    @Column(name = "consumer_id")
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "endpoint")
    private String endpoint;

    @OneToMany
    @JoinColumn(??)
    private List<Policy> policies;

  //getters and setters
}

我认为这并不难,但是我现在尝试了几个小时而无法完成。我是Spring的新手,所以如果有人能够帮助我,我将非常感激!


问题答案:

@Entity
public class Consumer {

    @OneToMany(mappedBy = "consumer")
    private List<Policy> policies;

}

@Entity
public class Policy {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn("consumer_id")
    private Consumer consumer;

}

fetch = FetchType.LAZY 不是必需的,而是可取的。

我在这里提供了一些基础知识

什么是@JoinColumn以及如何在Hibernate中使用

如果您不想Policy拥有Consumer

您可以使用联接表

@Entity
public class Consumer {

    @OneToMany
    private List<Policy> policies;

}

@Entity
public class Policy {

}

单向关系(Policy表将具有consumer_id列,但Policy类没有Consumer

@Entity
public class Consumer {

    @OneToMany
    @JoinColumn("consumer_id")
    private List<Policy> policies;

}

@Entity
public class Policy {

}

另外,请记住,如果要使用a Policy作为参考(来自词典),则需要@ManyToMany



 类似资料:
  • 问题内容: 假设我有2个表,分别称为“ twitter_user”和“ twitter_comments”。 twitter_users 具有字段:用户名和生物 twitter_comments 具有字段:用户名和注释 显然,一个用户在twitter_users中有1个条目,在twitter_comments中可能有很多条目 我想在Elastic Search中同时对twitter_users和t

  • 问题内容: 我有两个表: 帖子: 和标签: posts.tags和tags.tag都是文本类型。我想要的是从tag.tag到帖子中的行的关系,这样查询将给我对应于帖子1和2的行,查询给我2和3,给我1和3,依此类推。 我已经看过外键,但是我不确定这是我想要的。(老实说,我不确定它是做什么的)。据我所知,外键必须等于表的主键/唯一列。但是我想要的是诸如此类的所有行。我还希望能够获得以b开头的所有标签

  • 这是项目迁移 这是时间表 这样用户就可以迁移了 这是我的项目模型 这是我的时间表模型: 这是我的用户模型 现在,我从项目返回我的查询 这是可以的,但user_id用户在timesheets.user_id我不能得到它的时间表,并得到它 此控制器按时间表中的项目id返回项目和时间表,但时间表中的用户id我不知道如何将其输入系统

  • 问题内容: 我有一个Firebase数据库。我有公司和承包商。一个承包商可以为多个公司工作,而一个公司可以有多个承包商。这是直接的多对多关系。我希望能够回答有关公司和承包商的问题: 给定一家公司,他们是当前的承包商。 给承包商一个他们要工作的公司。 在Firebase中构造数据的替代方法有哪些? 问题答案: 自我回答确实是对此进行建模的一种方法。它可能是在关系数据库中建模的最直接等效方法: 承办商

  • 问题内容: 我知道在Elasticsearch中,我们可以在文档之间建立子/父关系。 然后,在建立索引时,我可以传递父代ID,以便将子文档和父文档链接起来: 无论如何,在Elasticsearch中建立多对多关系的模型吗? 数据驻留在具有以下架构的MySQL数据库中: 当前这是我的映射(请原谅数组表示法,我在PHP中使用Elastica与我的Elasticsearch服务器通信): 这种方法的问题