I have the following three relationships
The User
table
@OneToMany(mappedBy="user",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@SortNatural
SortedSet<Project> projects;
@OneToOne(cascade= CascadeType.ALL)
Company company;
The Project:
@ManyToOne
User user;
String company_name;
The Company:
@OneToOne(mappedBy = "company")
User user;
String name;
This gives me a user_id
in the Projects
table But I also want the company name , a cloumn from the company table to be in the projects table? How do I join user table and projects table on two columns ( user_id
and company_id
) I want the company_name
to be the name column from the Company table
Considering you are using a model like this:
One user has zero or one company;
One user has zero, one or more projects;
The project table holds a foreign key (user_id) to user;
The company table holds a foreign key (user_id) to user.
I think you can define the following JPA mappings:
//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;
This way after retrieving a project p you can get the company’s name:
Project p = ... // code to select a project
String companyName = p.getUser().getCompany.getName();