JPA:如何仅映射另一个实体的一个属性

时间:2019-04-26 13:21:33

标签: java hibernate jpa spring-data-jpa

假设我有两个实体:

@Entity
public class Phone {

    @Id
    private Long id;

    private String number;
}
@Entity
public class Person {

    @Id
    private Long id;

    private String name;
}

人与手机之间的关系是一对一的。

我怎么只能访问由电话ID映射的Person实体中的电话号码

@Entity
public class Person {

    @Id
    private Long id;

    private String name;

    // ???
    private String phoneNumber;
}

之所以无法映射整个实体,是因为在一些更现实的实体中,属性太多。

1 个答案:

答案 0 :(得分:0)

我认为您不能,但是可以接受这样的东西:

public class Person {

    @OneToOne
    @JoinColumn(name = "phone_id")
    private Phone phone;

    public String getPhoneNumber() {
        return phone.getNumber();
    }

}

尽管您已映射了整个对象,而不仅仅是单个属性,但仅公开了所需的单个属性。其他东西是隐藏的。

或者,使用视图在数据库层执行此操作:

create view person_with_phone as
select p.id, p.name,f.number 
from person p
join phone f on f.id=p.phone_id

,然后有一个实体类来匹配视图。您需要在JPA实现中关闭架构创建。