您的位置:首页 > 其它

How to join on two columns using hibernate JPA annotations

2015-09-09 10:30 483 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate