2011-01-08 45 views
19

Cách thực hiện truy vấn trường hợp bỏ qua giống như bằng cách sử dụng trình tạo tiêu chí. Đối với bất động sản mô tả tôi muốn làm một cái gì đó giống như upper(description) like '%xyz%'hibernate jpa criteriabuilder bỏ qua truy vấn trường hợp

Tôi đã sau truy vấn

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 

    CriteriaQuery<Person> personCriteriaQuery = criteriaBuilder.createQuery(Person.class); 
    Root<Person> personRoot = personCriteriaQuery.from(Person.class); 

    personCriteriaQuery.select(personRoot); 
    personCriteriaQuery.where(criteriaBuilder.like(personRoot.get(Person_.description), "%"+filter.getDescription().toUpperCase()+"%")); 
    List<Person> pageResults = entityManager.createQuery(personCriteriaQuery).getResultList(); 

Trả lời

39

Có một phương pháp CriteriaBuilder.upper():

personCriteriaQuery.where(criteriaBuilder.like(
    criteriaBuilder.upper(personRoot.get(Person_.description)), 
    "%"+filter.getDescription().toUpperCase()+"%"));  
+1

Cảm ơn bạn rất nhiều – user373201

2

Nếu cơ sở dữ liệu chứa những từ Đức với chữ như Fußballschuhe trong cột, java sẽ sửa đổi tham số trong phương thức chữ hoa thành FUSSBALLSCHUHE và truy vấn sẽ không khớp. Chữ thường sẽ hoạt động trong trường hợp này:

personCriteriaQuery.where(criteriaBuilder.like(
    criteriaBuilder.lower(personRoot.get(Person_.description)), 
    "%"+filter.getDescription().toLowerCase()+"%")); 
Các vấn đề liên quan