Как охотно получить один объект по умолчанию из коллекции в EJB3 / JPA - PullRequest
0 голосов
/ 16 февраля 2009

У меня есть объект Person с несколькими телефонными номерами.

 @OneToMany(mappedBy="person", cascade=CascadeType.ALL)
 public Set<PhoneNumberOfPerson> getPhoneNumbers() {
    return phoneNumbers;
 }

Теперь я хотел бы реализовать метод «получить номер телефона по умолчанию» для Person, которого охотно выбирают. Этот телефонный номер по умолчанию является одним из телефонных номеров в наборе phoneNumbers. Есть ли способ сделать это?

Причина, по которой я пытаюсь это реализовать, заключается в том, чтобы этот телефонный номер по умолчанию был указан на странице со списком «всех» людей в БД.

Как начинающий JPA, я сначала попробовал его следующим методом:

@Transient
public PhoneNumberOfPerson getDefaultPhoneNumber(){
    if(this.getPhoneNumbers().size()==0)
        return null;

    return this.getPhoneNumbers().iterator().next();

}

Но это, конечно, привело к очень медленной странице списка.

Так есть ли способ определить временное свойство, которое получает одну сущность из коллекции сущностей на основе некоторого запроса? Я использую Hibernate в качестве провайдера персистентности.

1 Ответ

0 голосов
/ 17 февраля 2009

Лучше всего, вероятно, иметь поле в таблице PhoneNumbers, чтобы указать, что это номер по умолчанию, а затем выполнить запрос о присоединении к запросу, который возвращает людей.

select p from Person p JOIN FETCH p.phoneNumbers as ph where ph.default = true

Если существует вероятность отсутствия PhoneNumber для лица, используйте левое соединение.

...