首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过关联链接实体映射两个实体

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

Stack Overflow用户
提问于 2015-03-27 02:37:47
回答 1查看 311关注 0票数 3

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

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

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

代码语言:javascript
复制
 Business       City
     \          /
  BusinessID CityID    <<join table has primary keys of Business and City tables
          |
        Branch
BranchID BusinessID CityID

样本数据

代码语言:javascript
复制
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只有一个分支等等。

我应该如何将分公司映射到一个企业和一个城市?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-30 05:47:25

您的映射应该是这样的:

代码语言:javascript
复制
@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;
}

这种中间实体映射是比使用@ManyToMany更好关联,它可能生成一些效率较低的SQL查询,并且不允许您向链接表中添加其他列。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29292380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档