我有一个名为User的实体,它与名为Company的实体有以下关系:
@Entity
public class User {
...
@ManyToOne
@JoinColumn(name="COMPANY_ID",referencedColumnName="ID")
private Company company = null;
...
}
在我的数据库中,我有一个带有“COMPANY_ID”列的User表。如何使用此字段创建JPA条件查询?
使用条件构建器,我尝试了以下表达式但没有成功:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(User.class);
Root mockEntityRoot = cq.from(User.class);
//cq.where(cb.equal(mockEntityRoot.get("company"), 2));
//cq.where(cb.equal(mockEntityRoot.get("COMPANY_ID"), 12));
cq.where(cb.equal(mockEntityRoot.get("company.id"), 8));
entityManager.createQuery(cq).getResultList();
但是我收到以下错误:“来自托管类型User的属性[company.id]不存在。”
提前致谢。
答案 0 :(得分:2)
我认为您需要明确的加入。
注意我正在使用Criteria的元模型。
这是我的一个片段,它与你的不一样,但你可以有一个想法
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Site> q = cb.createQuery(Site.class);
Root<Site> e = q.from(Site.class);
Join<Site,SiteType> siteType = e.join(Site_.siteType);
Predicate predicate = cb.conjunction();
Predicate p1 = cb.equal(siteType.get(SiteType_.id), selectedSiteType.getId());
Predicate p2 = cb.equal(e.get(Site_.markedAsDeleted), false);
predicate = cb.and(p1,p2);
q.where(predicate);
q.select(e);
TypedQuery<Site> tq = entityManager.createQuery(q);
List<Site> all = tq.getResultList();
return all;