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是您城市的正确字段名称). (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 使用Spring Boot进行基于名称的虚拟主机
- java – 应用程序类’com.sun.xml.messaging.saaj.soap.SOA
- RxJava / RxBinding:如何处理RxView上的错误
- java 获取项目文件路径实现方法
- Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线
- Java读取一行空格隔开的数字字符串并求出这些数字的和方法
- java – Postgres JDBC驱动程序:PSQLException:RETURNING
- Java Web学习教程之Hibernate And MyBatis的理解
- Java实现网页截屏
- java – 这是资源泄漏还是误报?
