java – 在连接多个表时如何使用JPA Criteria API
这是另一个问题:
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引用它,但是我收到了错误信息:
解决方法
如果您使用规范的
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是您城市的正确字段名称). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |