给定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是否支持这种映射?我应该使用哪些注释?
最佳答案
我相当确定您不能在非PK连接中使用@SecondaryTable
,这就是您在此处使用的表,即,表不共享相同的PK。
我可以看到的最简单(可能只有)选项是在数据库上创建一个视图并将一个Entity映射到该视图:
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;
}
关于java - 嵌入多对一关系中的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35462024/