What's the difference between @JoinColumn and mappedBy when using a JPA @OneToMany association

后端 未结 8 1935
日久生厌
日久生厌 2020-11-22 02:35

What is the difference between:

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY)
    @JoinColumn(name = \"c         


        
8条回答
  •  既然无缘
    2020-11-22 03:06

    The annotation mappedBy ideally should always be used in the Parent side (Company class) of the bi directional relationship, in this case it should be in Company class pointing to the member variable 'company' of the Child class (Branch class)

    The annotation @JoinColumn is used to specify a mapped column for joining an entity association, this annotation can be used in any class (Parent or Child) but it should ideally be used only in one side (either in parent class or in Child class not in both) here in this case i used it in the Child side (Branch class) of the bi directional relationship indicating the foreign key in the Branch class.

    below is the working example :

    parent class , Company

    @Entity
    public class Company {
    
    
        private int companyId;
        private String companyName;
        private List branches;
    
        @Id
        @GeneratedValue
        @Column(name="COMPANY_ID")
        public int getCompanyId() {
            return companyId;
        }
    
        public void setCompanyId(int companyId) {
            this.companyId = companyId;
        }
    
        @Column(name="COMPANY_NAME")
        public String getCompanyName() {
            return companyName;
        }
    
        public void setCompanyName(String companyName) {
            this.companyName = companyName;
        }
    
        @OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy="company")
        public List getBranches() {
            return branches;
        }
    
        public void setBranches(List branches) {
            this.branches = branches;
        }
    
    
    }
    

    child class, Branch

    @Entity
    public class Branch {
    
        private int branchId;
        private String branchName;
        private Company company;
    
        @Id
        @GeneratedValue
        @Column(name="BRANCH_ID")
        public int getBranchId() {
            return branchId;
        }
    
        public void setBranchId(int branchId) {
            this.branchId = branchId;
        }
    
        @Column(name="BRANCH_NAME")
        public String getBranchName() {
            return branchName;
        }
    
        public void setBranchName(String branchName) {
            this.branchName = branchName;
        }
    
        @ManyToOne(fetch=FetchType.LAZY)
        @JoinColumn(name="COMPANY_ID")
        public Company getCompany() {
            return company;
        }
    
        public void setCompany(Company company) {
            this.company = company;
        }
    
    
    }
    

提交回复
热议问题