给定Oracle Database HR sample schema中的COUNTRIESREGIONS表:

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/

10-08 20:46