在JPA命名查询中使用postgres函数“lower”获得错误

时间:2018-02-17 15:38:03

标签: java postgresql hibernate spring-data-jpa

知道为什么hibernate抱怨类型转换?我已经作为String传递给函数了。我正在使用带有命名参数的@Query语法。可以在查询中嵌入较低的函数吗?

源代码:

@Query("from UserEntity t where lower(t.email) = lower(:email)")
List<UserEntity> findByEmail(@Param("email") String email);

错误:

Caused by: org.postgresql.util.PSQLException: ERROR: function lower(bytea) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.
  Position: 899

nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet

相关链接: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.named-parameters

3 个答案:

答案 0 :(得分:2)

我终于明白了发生了什么。我收到错误是因为当我调用函数findByEmail时,在某些情况下,电子邮件是null,导致postgres抱怨。我只需要在调用此函数之前检查null。感谢@ akshar-patel试图提供帮助。

答案 1 :(得分:1)

当存在类型不匹配时,通常会发生此错误。 textstat_simil(dtm3, method = "cosine") # A.1 A.2 A.3 A.4 B.1 B.2 B.3 # A.2 0.2886751 # A.3 0.8660254 0.3333333 # A.4 0.4472136 0.2581989 0.5163978 # B.1 0.7500000 0.5773503 0.8660254 0.4472136 # B.2 0.7071068 0.4082483 0.8164966 0.6324555 0.7071068 # B.3 0.5773503 0.0000000 0.3333333 0.2581989 0.2886751 0.4082483 # B.4 1.0000000 0.2886751 0.8660254 0.4472136 0.7500000 0.7071068 0.5773503 被解释为email类型。您可以尝试添加显式强制转换,例如

bytea

答案 2 :(得分:-2)

我终于明白发生了什么事。我收到错误消息是因为当我调用函数findByEmail时,在某些情况下email为null会导致问题