有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 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) 个答案

  1. # 1 楼答案

    我不认为你能,但像这样的事情可能是可以接受的:

    public class Person {
    
        @OneToOne
        @JoinColumn(name = "phone_id")
        private Phone phone;
    
        public String getPhoneNumber() {
            return phone.getNumber();
        }
    
    }
    

    虽然映射了整个对象,而不仅仅是单个属性,但只显示了所需的单个属性。其他东西都藏起来了

    或者,使用视图在DB层执行此操作:

    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实现中关闭模式创建