Spring Data JPA 没有在方法名称中指定 lower 关键字
Spring Data JPA doesn't specify lower keyword in method names
我在查询 table 时需要将所有电子邮件小写,但文档仅指定了 UPPER()
:
的 method-name-keyowrd
IgnoreCase findByFirstnameIgnoreCase … 其中 UPPER(x.firstame) = UPPER(?1)
如何使用LOWER()
?
我已经调试了它,可以看到 PredicateBuilder
似乎没有考虑它。
您知道这是否是一个限制吗?或者这可以通过不同的方式实现吗?
Spring Data JPA 文档对属性的大小写敏感度进行了说明:
// Enabling ignoring case for an individual property
List<Person> findByLastnameIgnoreCase(String lastname);
// Enabling ignoring case for all suitable properties
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
在您的方法名称中使用 IgnoreCase
将自动生成一个对一个或所有指定属性不区分大小写的查询。
否则,您始终可以通过像这样注释来为您的方法指定自定义查询:
@Query("select u from User u")
Stream<User> findAllByCustomQueryAndStream();
通过使用 @Query
注释,您可以使用普通的旧 JPQL 来查询您的数据库。
根据 Spring JPA reference guide,findXXXByIgnoreCase(...)
默认使用 UPPER(...)
执行不区分大小写的搜索。
要强制它使用 LOWER
关键字,我们可以使用带有 @Query
注释并指定 SELECT .... LOWER(email)= LOWER(?1)
的自定义查询。
在我的例子中,我使用了如下自定义查询来强制它对 email
列使用 LOWER
关键字:
@Query("SELECT p from Person p where LOWER(email) = LOWER(?1)")
List<Person> findByEmailIgnoreCase(@Param("email") String email);
这导致创建了以下查询:
Hibernate: select person0_.id as id1_0_, person0_.email as email2_0_, person0_.first_name as first_na3_0_, person0_.last_name as last_nam4_0_ from person person0_ where lower(person0_.email)=lower(?)
这应该有助于查询使用函数索引,即 LOWER(email)
。
我在查询 table 时需要将所有电子邮件小写,但文档仅指定了 UPPER()
:
IgnoreCase findByFirstnameIgnoreCase … 其中 UPPER(x.firstame) = UPPER(?1)
如何使用LOWER()
?
我已经调试了它,可以看到 PredicateBuilder
似乎没有考虑它。
您知道这是否是一个限制吗?或者这可以通过不同的方式实现吗?
Spring Data JPA 文档对属性的大小写敏感度进行了说明:
// Enabling ignoring case for an individual property
List<Person> findByLastnameIgnoreCase(String lastname);
// Enabling ignoring case for all suitable properties
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
在您的方法名称中使用 IgnoreCase
将自动生成一个对一个或所有指定属性不区分大小写的查询。
否则,您始终可以通过像这样注释来为您的方法指定自定义查询:
@Query("select u from User u")
Stream<User> findAllByCustomQueryAndStream();
通过使用 @Query
注释,您可以使用普通的旧 JPQL 来查询您的数据库。
根据 Spring JPA reference guide,findXXXByIgnoreCase(...)
默认使用 UPPER(...)
执行不区分大小写的搜索。
要强制它使用 LOWER
关键字,我们可以使用带有 @Query
注释并指定 SELECT .... LOWER(email)= LOWER(?1)
的自定义查询。
在我的例子中,我使用了如下自定义查询来强制它对 email
列使用 LOWER
关键字:
@Query("SELECT p from Person p where LOWER(email) = LOWER(?1)")
List<Person> findByEmailIgnoreCase(@Param("email") String email);
这导致创建了以下查询:
Hibernate: select person0_.id as id1_0_, person0_.email as email2_0_, person0_.first_name as first_na3_0_, person0_.last_name as last_nam4_0_ from person person0_ where lower(person0_.email)=lower(?)
这应该有助于查询使用函数索引,即 LOWER(email)
。