JPA: Как отобразить только одно свойство из другого объекта - PullRequest
0 голосов
/ 26 апреля 2019

Допустим, у меня есть две сущности:

@Entity
public class Phone {

    @Id
    private Long id;

    private String number;
}
@Entity
public class Person {

    @Id
    private Long id;

    private String name;
}

Отношения между человеком и телефоном один в один.

Как я могу получить доступ только к номеру телефона в сущности Person, сопоставленной с идентификатором телефона

@Entity
public class Person {

    @Id
    private Long id;

    private String name;

    // ???
    private String phoneNumber;
}

Причина не отображения всей сущности заключается в том, что в некоторых более реалистичных сущностях слишком много свойств.

1 Ответ

0 голосов
/ 26 апреля 2019

Я не думаю, что вы можете, но что-то вроде этого может быть приемлемым:

public class Person {

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

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

}

Хотя вы отобразили весь объект, а не только одно свойство, вы раскрыли только одно свойство, которое выхочу.Другие вещи скрыты.

В качестве альтернативы, сделайте это на уровне БД, используя View:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...