假设我有两个实体:
@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;
}
之所以无法映射整个实体,是因为在一些更现实的实体中,属性太多。
答案 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实现中关闭架构创建。