2014-09-07 3 views
0

я в есть сущностьJPA 2.5 CriteriaQuery условные дочерние объекты

@javax.persistence.Table(name = "CONTACT") 
public class ContactEntity { 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "contact") 
    private List<PhoneEntity> phones; 

    ... 
} 

@Table(name = "CONTACT_PHONE") 
@Entity 
public class PhoneEntity { 
    @Column(name = "DEVICE_TYPE") 
    private String deviceType; 

    ... 
} 

Когда я выбираю свою сущность с помощью CriteriaBuilder, я хочу, чтобы фильтровать телефоны, принадлежащие Контакты некоторым perticular поле. Например, по типу deviceType. Возможно ли использование API критериев?

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 
CriteriaQuery<ContactEntity> criteriaQuery = criteriaBuilder.createQuery(ContactEntity.class); 
Root<ContactEntity> root = criteriaQuery.from(ContactEntity.class); 
List<ContactEntity> contactSnapshotEntities = 
      entityManager.createQuery(criteriaQuery).getResultList(); 
+0

* Когда я выбираю свою сущность *: какой объект, используя какой код? –

+0

Я добавил код примера выбора. – user641652

+0

JPA 2.5? WTF? JPA - 1,0, 2,0 или 2,1 –

ответ

0

Если вы спросите Контактный объект для своих телефонов, вы всегда будете получать все телефоны этого контакта лица, независимо от способа вы получили Контактную сущность. Это контракт вашего класса: у контакта есть много телефонов, доступных с помощью метода getPhones().

Если вы хотите подмножество телефонов контактного объекта, то вы не должны получать Контакт и получать его телефоны. Вы должны использовать запрос, который возвращает другую коллекцию, в которой содержатся только телефоны, соответствующие критериям. Например:

select p from Phone p where p.contact = :contact and p.deviceType = :deviceType 

(или тот же запрос, запутанный по критериям API).

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