我对JPA 2很新,它是CriteriaBuilder/CriteriaQuery API:
我想计算CriteriaQuery的结果而不实际检索它们.这是可能的,我没有找到任何这样的方法,唯一的方法是这样做:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<MyEntity> cq = cb
.createQuery(MyEntityclass);
// initialize predicates here
return entityManager.createQuery(cq).getResultList().size();
Run Code Online (Sandbox Code Playgroud)
这不是正确的方法......
有解决方案吗?
这是对此的进一步问题:
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"));
Run Code Online (Sandbox Code Playgroud)
公司有地址,地址内有City-pojo和Country-Pojo.我该如何使用它JOIN?我尝试引用它,address.city但我收到了错误消息:
来自托管类型[EntityTypeImpl @ 1692700229:Company [javaType:class com.test.domain.Company descriptor:RelationalDescriptor(com.test.domain.Company - > [DatabaseTable(COMPANY)])的属性[address.city],映射:16]]不存在.
我有以下四个表:
SCHEDULE_REQUEST 表: ID、APPLICATION_ID (FK)
应用表: ID、代码
USER_APPLICATION 表: APPLICATION_ID (FK)、USER_ID (FK)
用户表: ID、姓名
现在我想创建一个CriteriaBuilderwhere 条件是选择ScheduleRequests指定的用户 ID。
我有以下代码:
List<User> usersList = getSelectedUsers(); // userList contains users I wanted to select
CriteriaBuilder builder = getJpaTemplate().getEntityManagerFactory().getCriteriaBuilder();
CriteriaQuery<ScheduleRequest> criteria = builder.createQuery(ScheduleRequest.class);
Root<ScheduleRequest> scheduleRequest = criteria.from(ScheduleRequest.class);
criteria = criteria.select(scheduleRequest);
ParameterExpression<User> usersIdsParam = null;
if (usersList != null) {
usersIdsParam = builder.parameter(User.class);
params.add(builder.equal(scheduleRequest.get("application.userApplications.user"), usersIdsParam));
}
criteria = criteria.where(params.toArray(new Predicate[0]));
TypedQuery<ScheduleRequest> query = getJpaTemplate().getEntityManagerFactory().createEntityManager().createQuery(criteria);
// Compile Time Error here:
// The method …Run Code Online (Sandbox Code Playgroud)