如何通过关联 link 实体映射两个实体
How to map two entities through an associate link entity
我需要记录他们所在城市的各种业务以及他们在每个城市的分支机构。每个企业可能在不同的城市,每个城市可能有不同的分支机构。
以银行为例。可能在A市和B市,A市可能有两家分店,B市只有一家。
我想分支 table 应该有连接 table 的两个主键的 branchid 和外键。通过这种方式,我可以确保任何分支机构都不会关联到多个城市和企业的组合。
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 只有一家分店,依此类推
我应该如何将分支映射到企业和城市?
您的映射应如下所示:
@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 查询,并且不允许您向 link table 添加一些额外的列.
我需要记录他们所在城市的各种业务以及他们在每个城市的分支机构。每个企业可能在不同的城市,每个城市可能有不同的分支机构。
以银行为例。可能在A市和B市,A市可能有两家分店,B市只有一家。
我想分支 table 应该有连接 table 的两个主键的 branchid 和外键。通过这种方式,我可以确保任何分支机构都不会关联到多个城市和企业的组合。
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 只有一家分店,依此类推
我应该如何将分支映射到企业和城市?
您的映射应如下所示:
@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 查询,并且不允许您向 link table 添加一些额外的列.