One-To-Many Relationship in Spring Data JPA

前端 未结 2 1186
难免孤独
难免孤独 2021-01-18 12:23

I would like to have a One-to-many relationship between 2 Entities, Consumer and Policy. One consumer should have several policies.

This is an example of a Consumer

相关标签:
2条回答
  • 2021-01-18 12:52

    Try this code :)

    Your Consumer Class

    @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;
        }
    }
    

    Be aware that in the mapped by, you should use the name of the column that references Policy in your database, so if it's no policyId, use the name you gave to it

    Your Policy Class

    @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;
            }
    
    }
    
    0 讨论(0)
  • 2021-01-18 12:55
    @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 is not necessary, but desirable.

    I have provided some basics here

    what is @JoinColumn and how it is used in Hibernate

    If you want to a Policy don't have a Consumer:

    You can use a join table

    @Entity
    public class Consumer {
    
        @OneToMany
        private List<Policy> policies;
    
    }
    
    @Entity
    public class Policy {
    
    }
    

    A unidirectional relation (a Policy table will have consumer_id column, but a Policy class doesn't have a Consumer)

    @Entity
    public class Consumer {
    
        @OneToMany
        @JoinColumn("consumer_id")
        private List<Policy> policies;
    
    }
    
    @Entity
    public class Policy {
    
    }
    

    Also, keep in mind, that if you want to use a Policy as a reference (from a dictionary) you will need @ManyToMany.

    0 讨论(0)
提交回复
热议问题