Bạn có thể vui lòng giúp tôi cách chuyển đổi các mã sau đây để sử dụng toán tử "in" của trình tạo tiêu chí không? Tôi cần lọc bằng cách sử dụng danh sách/mảng tên người dùng bằng "in".JPA CriteriaBuilder - Cách sử dụng toán tử so sánh "IN"
Tôi cũng đã cố gắng tìm kiếm bằng phương pháp JPA CriteriaBuilder - "in" nhưng không thể tìm thấy kết quả tốt. Vì vậy, tôi thực sự sẽ đánh giá cao nếu bạn có thể cung cấp cho tôi URL tham chiếu cho chủ đề này. Cảm ơn.
Đây là mã của tôi:
//usersList is a list of User that I need to put inside IN operator
CriteriaBuilder builder = getJpaTemplate().getEntityManagerFactory().getCriteriaBuilder();
CriteriaQuery<ScheduleRequest> criteria = builder.createQuery(ScheduleRequest.class);
Root<ScheduleRequest> scheduleRequest = criteria.from(ScheduleRequest.class);
criteria = criteria.select(scheduleRequest);
List<Predicate> params = new ArrayList<Predicate>();
List<ParameterExpression<String>> usersIdsParamList = new ArrayList<ParameterExpression<String>>();
for (int i = 0; i < usersList.size(); i++) {
ParameterExpression<String> usersIdsParam = builder.parameter(String.class);
params.add(builder.equal(scheduleRequest.get("createdBy"), usersIdsParam));
usersIdsParamList.add(usersIdsParam);
}
criteria = criteria.where(params.toArray(new Predicate[0]));
TypedQuery<ScheduleRequest> query = getJpaTemplate().getEntityManagerFactory().createEntityManager().createQuery(criteria);
for (int i = 0; i < usersList.size(); i++) {
query.setParameter(usersIdsParamList.get(i), usersList.get(i).getUsername());
}
List<ScheduleRequest> scheduleRequestList = query.getResultList();
Các nội Query String được chuyển xuống dưới, vì vậy tôi không nhận được hồ sơ được tạo ra bởi hai người dùng, bởi vì nó được sử dụng "AND".
select generatedAlias0 from ScheduleRequest as generatedAlias0 where (generatedAlias0.createdBy=:param0) and (generatedAlias0.createdBy=:param1) order by generatedAlias0.trackingId asc
Hi perissf, cảm ơn bạn đã trả lời. Tôi có thể hỏi xin vui lòng, "ScheduleRequest_" là gì? Làm thế nào để tôi tạo ra nó? – Jemru
Đó là một lớp Metamodel được tạo tự động bởi nhà cung cấp JPA của bạn. Nếu bạn đang sử dụng Hibernate, hãy kiểm tra liên kết này http://docs.jboss.org/hibernate/jpamodelgen/1.0/reference/en-US/html_single/ – perissf
Đọc mã giả của tôi Tôi thấy sự khác biệt về loại có thể xảy ra. Bạn đang tham gia với userNames (String) hoặc userIds (Integer/Long)? Xin vui lòng cho tôi biết để tôi có thể cập nhật câu trả lời của tôi – perissf