加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在连接多个表时如何使用JPA Criteria API

发布时间:2020-12-14 16:26:55 所属栏目:Java 来源:网络整理
导读:这是另一个问题: How to use JPA Criteria API in JOIN CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();CriteriaQueryCompany criteria = criteriaBuilder.createQuery( Company.class );RootCompany companyRoot = criteria.from( Company.cl
这是另一个问题:

How to use JPA Criteria API in JOIN

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();

CriteriaQuery<Company> criteria = criteriaBuilder.createQuery( Company.class );
Root<Company> companyRoot = criteria.from( Company.class );
Join<Company,Product> products = companyRoot.join("dentist");
Join<Company,City> cityJoin = companyRoot.join("address.city");//Company->Address->City-city
criteria.where(criteriaBuilder.equal(products.get("category"),"dentist"),criteriaBuilder.equal(cityJoin.get("city"),"Leeds"));

一个公司有一个地址,在地址内有城市pojo和乡村Pojo.如何在JOIN中使用它?我试图用address.city引用它,但是我收到了错误信息:

The attribute [address.city] from the managed type
[EntityTypeImpl@1692700229:Company [ javaType: class
com.test.domain.Company descriptor:
RelationalDescriptor(com.test.domain.Company –>
[DatabaseTable(COMPANY)]),mappings: 16]] is not present.

解决方法

如果您使用规范的 Metamodel,您将避免这种错误.
在您的代码中,您误用了“牙医”关键字,这可能是您错误的原因,因为“牙医”不是公司实体中的一个字段.

然而,看看你如何在另一个问题中定义你的类,使用Metamodel来定义这个连接的方法是这样的:

SetJoin<Company,Product> products = companyRoot.join(Company_.products);

如您所见,Metamodel避免使用字符串,因此避免了大量的运行时错误.如果无论如何,不??要使用元模型,请尝试:

SetJoin<Company,Product> products = companyRoot.join("products");

如果你现在想添加一个谓词,即在某个地方之后,你会写下如下:

Predicate predicate = criteriaBuilder.equal(products.get(Product_.category),"dentist");
criteria.where(predicate);

如果要为City实体添加联接:

Join<Company,City> city = companyRoot.join(Company_.city);
predicate = criteriaBuilder.and(predicate,criteriaBuilder.equal(city.get(City_.cityName),"Leeds");
criteria.where(predicate);

(假设cityName是您城市的正确字段名称).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读