当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA中的一对多关系

贺俊杰
2023-03-14

我希望在消费者和政策这两个实体之间建立一对多关系。一个消费者应该有几个政策。

这是我想要的一个消费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,所以如果有人能帮助我,我会非常感激!

共有2个答案

夏祯
2023-03-14

试试这个代码:)

你的消费者阶层

@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(cascade = CascadeType.ALL, mappedBy = "idPolicy")
    private List<Policy> policies;


    public Consumer() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEndpoint() {
        return endpoint;
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }

    public List<Policy> getPolicies() {
        return policies;
    }

    public void setPolicies(List<Policy> policies) {
        this.policies = policies;
    }
}

请注意,在映射的by中,您应该使用引用数据库中策略的列的名称,因此,如果它不是策略ID,请使用您为其指定的名称

您的政策类

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

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

        @ManyToOne(optional = false)
        private Consumer consumer;

        public Policy() {

        }

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

}
陈昂熙
2023-03-14
@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中是如何使用的

如果你想一个策略没有一个消费者

您可以使用联接表

@Entity
public class Consumer {

    @OneToMany
    private List<Policy> policies;

}

@Entity
public class Policy {
    
}

单向关系(策略表将具有consumer_id列,但是策略类没有消费者

@Entity
public class Consumer {

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

}

@Entity
public class Policy {
    
}

此外,请记住,如果您想使用策略作为表格数据(来自字典),您将需要@ManyTo很多

 类似资料:
  • 我在Spring Data JPA中有两个实体: 目标是获取与user\u id相关的所有税款: User.java 税务ayment.jva 我不想要一个太多的注释从User.java和列映射在纳税user_id。 规格等级如下: 根据我获取所有与user\u id相关的税款的目标,规范是正确的还是错误的?

  • 问题内容: 我想在两个实体(消费者和政策)之间建立一对多关系。一个消费者应该有几项政策。 这是我希望拥有的Consumer JSON对象的示例: 这是我到目前为止所拥有的: 政策实体 消费者实体 我认为这并不难,但是我现在尝试了几个小时而无法完成。我是Spring的新手,所以如果有人能够帮助我,我将非常感激! 问题答案: @Entity public class Consumer { 不是必需的,

  • 母实体 子实体 代码持久化 请告诉我这些步骤是否正确。我有以下例外。并且无法理解为什么父id在子表中不可用 原因:org.hibernate.exception.ConstraintViolation异常:无法将值NULL插入到列PARAM_REF_ID,表PARAM中;列不允许空值。INSERT失败。

  • 在我的项目中,我使用Spring数据jpa。我有多对多关系的表格。我的实体: 和零件: 现在在Controller中,我尝试从表部分中删除一行: 但我有例外: 区分完整性约束冲突:“FK9Y4MKICYBLJWPENACP4298I49:PUBLIC.PARTS外键(ID\u导出)引用PUBLIC.EXPORT(ID)(1)”;SQL语句:/*删除com.aleksandr0412.demo.en

  • 我还尝试了一些非本地查询, 但这也显示了“JOIN预期的路径![SELECT u.username,p.pname FROM com.central.model.users u INNER JOIN Privillages p ON u.privid=p.pid]”

  • 配置和配置头之间有一对多关系。以下是配置映射程序: 以下是ConfigHeadersMapper: 当我试图保存一个新实体时(配置的ID等于null) 保存配置和ConfigHeaders,但ConfigHeaders处的配置id(FK)为空。 所以我尝试了以下代码: 并使用自动生成的父ID(config_ID)保存子项(ConfigHeaders)。 你能告诉我Map结构有什么问题吗?我对这个工