如何通过关联链接实体映射两个实体

时间:2015-03-27 02:37:48

标签: java mysql hibernate hibernate-mapping

我需要记录各个城市及其分支机构的各种业务。每个企业可能在不同的城市,每个城市可能有不同的分支。

以银行为例。它可能在城市A和B,在城市A可能有两个分支,在城市B只有一个。

我认为分支表应该具有连接表的两个主键的branchid和foreign键。通过这种方式,我可以确保没有任何分支机构与多个城市和企业的组合相关联。

 Business       City
     \          /
  BusinessID CityID    <<join table has primary keys of Business and City tables
          |
        Branch
BranchID BusinessID CityID

示例数据

Business Table          
1         
2       
3        

City Table
A
B
C

Join Table
Business_City
1         A
1         B
2         A
3         C

Branch Table
Business City   Branch
1          A      I1
1          A      I2
1          B      I6
2          A      I5
3          C      I3

正如您所看到的那样,企业1和企业2都在城市A中。企业1在城市A中有两个分支,而企业2只有一个分支等。

我应该如何将分行映射到商业和城市?

1 个答案:

答案 0 :(得分:2)

这就是你的映射应该是这样的:

@Entity
public class Business {
    @Id
    private Long id;

    @OneToMany(mappedBy = "business")
    private Set<Branch> branches = new HashSet<>();
}

@Entity
public class City {
    @Id
    private Long id;

    @OneToMany(mappedBy = "city")
    private Set<Branch> branches = new HashSet<>();
}

@Entity
public class Branch {

    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "business_id")
    private Business business;

    @ManyToOne
    @JoinColumn(name = "city_id")
    private City city;
}

此中间实体映射是better than using a @ManyToMany关联,可能会生成一些效率较低的SQL查询,并且不允许您向链接表添加一些其他列。