我有以下四個表:JPA/Hibernate:CriteriaBuilder - 如何使用關係對象創建查詢?
SCHEDULE_REQUEST TABLE: ID, APPLICATION_ID(FK)
應用表: ID。 CODE
USER_APPLICATION表: APPLICATION_ID(FK), USER_ID(FK)
用戶表: ID, NAME
現在我想創造條件建設者WHERE條件爲指定的用戶ID選擇ScheduleRequests。
我有以下代碼:
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 setParameter(Parameter<T>, T) in the type TypedQuery<ScheduleRequest> is not // applicable for the arguments (ParameterExpression<User>, List<User>)
query.setParameter(usersIdsParam, usersList);
return query.getResultList();
能否請您幫助我如何查詢過濾器傳遞給有關係的對象? 我認爲我在「application.userApplications.user」中所做的是錯誤的? 請真的需要幫助。 預先感謝您。
嗨perissf。感謝幫助。但我沒有「ScheduleRequest_」,「UserApplication_」,「User_」類。我如何創建它們?而且在你的僞代碼中,你沒有包含「應用程序」表?關係表是USER_APPLICATION表,與USER和APPLICATION表相關。請提供建議。真的很感激它。謝謝。 – Jemru
我在這裏看到了一些教程,但我不知道如何應用它在我的情況。 http://www.altuure.com/2010/09/23/jpa-criteria-api-by-samples-%E2%80%93-part-ii/ – Jemru
我已經更新了我的答案,添加了一些參考文獻並添加第三次加入根據您的信息 – perissf