2009-02-16 6 views
0

У меня есть объект Person с несколькими телефонными номерами.Как с нетерпением получить один объект «по умолчанию» из коллекции в EJB3/JPA

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

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

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

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

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

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

} 

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

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

ответ

0

Ваш лучший выбор - вероятно, иметь поле в таблице PhoneNumbers, чтобы указать, что это номер по умолчанию, а затем сделать JOIN FETCH в запросе, который возвращает Person (s).

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

Если есть возможность что нет никакого PhoneNumber для лица затем использовать LEFT JOIN.

 Смежные вопросы

  • Нет связанных вопросов^_^