繁体   English   中英

jpa条件-基于数据库字段名称的表达式

[英]jpa criteria - expression based on db field name

我有一个名为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();

但是我收到以下错误:“托管类型“用户”的属性[company.id]不存在。”

提前致谢。

我认为您需要明确的加入。

注意,我正在使用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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM