鉴于来自Oracle Database HR sample schema的COUNTRIES
和REGIONS
表:
COUNTRIES(country_id, country_name, region_id)
REGIONS(region_id, region_name)
这个Country
实体类:
import javax.persistence.*;
@Entity
@Table(name = "COUNTRIES")
public class Country {
@Id
@Column(name = "COUNTRY_ID")
private String id;
@Column(name = "COUNTRY_NAME")
private String name;
}
我想在一个Country
实体类中映射两个表,也就是说,不创建单独的Region
实体类。
而不是这种多对一的关系:
@ManyToOne
@JoinColumn(name = "REGION_ID")
private Region region;
我希望将一个简单的String regionName
属性映射到REGIONS.REGION_NAME
,并使用REGIONS.REGION_ID = COUNTRIES.REGION_ID
作为连接条件。
JPA 2.0是否支持这种映射?我应该使用哪些注释?
答案 0 :(得分:1)
我很确定你不能将@SecondaryTable
用于非PK连接,这是你在这里所拥有的,即表格不共享相同的PK。
我可以看到的最简单(也可能是唯一)选项是在数据库上创建一个视图并将实体映射到该视图:
create view vw_countries as
select
c.country_id as id, c.country_name as name, r.region_name as region
from
countries c
inner join
regions r on r.region_id = c.region_id
实体:
@Entity
@Table(name = "vw_countries")
public class Country{
@Id
private Long id;
private String name;
private String region;
}