Jem*_*mru 5 java hibernate jpa criteria filter
我有以下四个表:
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 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();
Run Code Online (Sandbox Code Playgroud)
你能帮我如何将查询过滤器传递给关系对象吗?我认为我在“application.userApplications.user”中所做的事情是错误的?请真的需要帮助。
先感谢您!
使用规范的元模型和一些连接,它应该可以工作。尝试一下,如果您从以下伪代码中得到一些提示(未测试):
...
Predicate predicate = cb.disjunction();
if (usersList != null) {
ListJoin<ScheduleRequest, Application> applications = scheduleRequest.join(ScheduleRequest_.applications);
ListJoin<Application, UserApplication> userApplications = applications.join(Application_.userApplications);
Join<UserApplication, User> user = userApplications.join(UserApplication_.userId);
for (String userName : usersList) {
predicate = builder.or(predicate, builder.equal(user.get(User_.name), userName));
}
}
criteria.where(predicate);
...
Run Code Online (Sandbox Code Playgroud)
为了了解条件查询,请查看以下教程: http://www.ibm.com/developerworks/java/library/j-typesafejpa/ http://docs.oracle.com/javaee/6/tutorial/文档/gjitv.html
第二个链接还应该指导您如何使用元模型类,这些类应该由编译器/IDE 自动构建。
| 归档时间: |
|
| 查看次数: |
22787 次 |
| 最近记录: |