hibernate jpa criteriabuilder忽略案例查询
如何使用criteria builder执行类似的忽略案例查询。对于description属性,我希望执行类似于“%xyz%”之类的hibernate jpa criteriabuilder忽略案例查询,jpa,Jpa,如何使用criteria builder执行类似的忽略案例查询。对于description属性,我希望执行类似于“%xyz%”之类的upper(description)的操作。 我有以下疑问 CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Person> personCriteriaQuery = criteriaBuilder.createQuery(P
upper(description)的操作。
我有以下疑问
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();
CriteriaBuilder-CriteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery personCriteriaQuery=criteriaBuilder.createQuery(Person.class);
Root personRoot=personCriteriaQuery.from(Person.class);
personCriteriaQuery.select(personRoot);
其中(criteriaBuilder.like(personRoot.get(Person.description),“%”加上filter.getDescription().toUpperCase()+“%”);
List pageResults=entityManager.createQuery(personCriteriaQuery).getResultList();
有一个CriteriaBuilder.upper()
方法:
personCriteriaQuery.where(criteriaBuilder.like(
criteriaBuilder.upper(personRoot.get(Person_.description)),
"%"+filter.getDescription().toUpperCase()+"%"));
如果数据库包含列中带有Fußballschuhe等字母的德语单词,java会将大写方法中的参数修改为FUSSBALLSCHUHE,查询将不匹配。在这种情况下,小写将起作用:
personCriteriaQuery.where(criteriaBuilder.like(
criteriaBuilder.lower(personRoot.get(Person_.description)),
"%"+filter.getDescription().toLowerCase()+"%"));
可能会将区域设置传递到toUpperCase或toLowerCase方法中?数据库也可能在不考虑区域设置的情况下执行大写,因此请首先确保您的程序与数据库一致。对不起,这是一个主题外的问题,您何时使用类Person?,我很好奇为什么在类名中使用下划线。@MarcosEchagüe这些类是通过
hibernate jpamodelgen
自动生成的。它们用于获取字段名,而不是使用原始字符串。重构也变得更容易。欲了解更多信息,请访问感谢@felix seifert!!现在我知道了!