Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hibernate jpa criteriabuilder忽略案例查询_Jpa - Fatal编程技术网

hibernate jpa criteriabuilder忽略案例查询

hibernate jpa criteriabuilder忽略案例查询,jpa,Jpa,如何使用criteria builder执行类似的忽略案例查询。对于description属性,我希望执行类似于“%xyz%”之类的upper(description)的操作。 我有以下疑问 CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Person> personCriteriaQuery = criteriaBuilder.createQuery(P

如何使用criteria builder执行类似的忽略案例查询。对于description属性,我希望执行类似于“%xyz%”之类的
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!!现在我知道了!