我在Sping Boot 3中遇到了一个Hibernate自定义数据类型(AttributeConverter)的问题,我已经写了一个转换器,一个注解,一个验证器,描述符等。到目前为止一切正常。
现在,我在JPA repo中编写了一个非常简单的SQL,我想知道它是否不起作用:
@Query("SELECT a FROM #{#entityName} a WHERE ((:#{#iValue} IS NULL AND a.value IS NULL) OR a.value = :#{#iValue})")
MyEntity findByValue(@Param("iValue") MyDataType value)
并获得错误消息:
org.springframework.orm.jpa.JpaSystemException: Could not determine recommended JdbcType for org.example.MyDataType
我现在发现它是基于NULL的检查,并且值不是NULL。
这意味着如果value == null
,上层查询可以正常工作,而不会出现错误消息。如果value != null
,则会出现上述错误消息。
1.问题,我还需要在哪里输入什么,以便检查!= null。
1.有没有比((:#{#iValue} IS NULL AND a.value IS NULL) OR a.value = :#{#iValue})
更优雅的方法。a.value = :#{#iValue}
不适用于空值。如果值为NULL,Hibernate不会自动将其转换为IS NULL
。我在互联网上没有找到任何不同的解决方法。
编辑:看起来这个bug又复活了。它曾经被解决过,现在在Hibernate 6中只是反向复活了。
https://github.com/spring-projects/spring-data-jpa/issues/2549
https://hibernate.atlassian.net/browse/HHH-8697
https://hibernate.atlassian.net/browse/HHH-9901
https://hibernate.atlassian.net/browse/HHH-9320
1条答案
按热度按时间tpxzln5u1#
解决办法是:
无
#{#...}