我有一个实体
@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
选择我的实体时,我希望通过某些特定字段过滤Contact拥有的手机。例如,通过deviceType。是否可以使用Criteria 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)
如果您向联系人实体询问其电话,您将始终获得此联系人实体的所有电话,无论您获得联系人实体的方式如何。这是您班级的合同:联系人有很多电话,可以使用getPhones()方法。
如果您想要一个联系人实体的手机的子集,那么您不应该获得联系人并获取其手机。您应该使用返回另一个集合的查询,该集合仅包含符合条件的电话。例如:
select p from Phone p where p.contact = :contact and p.deviceType = :deviceType
(或标准API混淆的相同查询)。