问题描述
我有以下三个关系
用户表
@OneToMany(mappedBy="user",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@SortNatural
SortedSet<Project> projects;
@OneToOne(cascade= CascadeType.ALL)
Company company;
该项目:
@ManyToOne
User user;
String company_name;
公司:
@OneToOne(mappedBy = "company")
User user;
String name;
这在Projects表中为我提供了一个user_id,但我还希望公司名称,来自company表的克隆在项目表中? 如何在两列(user_id和company_id)上加入用户表和项目表,我希望company_name是Company表中的name列
1楼
考虑到您正在使用这样的模型:
- 一个用户拥有零个或一个公司 ;
- 一个用户有零个,一个或多个项目 ;
- 项目表为用户保存一个外键(user_id);
- 公司表持有user的外键(user_id)。
我认为您可以定义以下JPA映射:
//User table
@Id
Long id;
@OneToMany(mappedBy="user",fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@SortNatural
SortedSet<Project> projects;
@OneToOne(mappedBy="user", fetch=FetchType.EAGER, cascade= CascadeType.ALL)
Company company;
//Project table
@Id
Long id;
@ManyToOne
@JoinColumn(name="user_id")
User user;
//Company table
@Id
Long id;
@OneToOne
@JoinColumn(name="user_id")
User user;
String name;
这样,在检索项目p
您可以获得公司的名称:
Project p = ... // code to select a project
String companyName = p.getUser().getCompany.getName();