Java JPA查询忽略搜索字段为空的记录
这个JPA查询Java JPA查询忽略搜索字段为空的记录,java,jpa,Java,Jpa,这个JPA查询 @Query("SELECT e FROM MyEntity e WHERE (e.field1 IN :collectionOfField1s AND TRIM(LOWER(e.status)) <> 'deleted')") @Query(“从MyEntity e中选择e,其中(e.field1 IN:collectionOfField1s和TRIM(LOWER(e.status))‘deleted’”) 应按预期返回e.field1在:collect
@Query("SELECT e FROM MyEntity e WHERE (e.field1 IN :collectionOfField1s AND TRIM(LOWER(e.status)) <> 'deleted')")
@Query(“从MyEntity e中选择e,其中(e.field1 IN:collectionOfField1s和TRIM(LOWER(e.status))‘deleted’”)
应按预期返回e.field1在:collectionOfField1s和e.status“已删除”中的所有记录,但不幸的是,它没有返回e.status仍然为null(尚未填充)的记录。我想知道我需要更改什么,以便它返回e.field1位于:collectionOfField1s和e.status“已删除”的所有记录,包括e.status为null的记录
我非常感谢你在这方面的帮助
谢谢Null在数据库中是一个非常特殊的东西,您需要以不同的方式对待它。你至少有两种方法来实现你想要的。第一个是指定NULL为预期值,如下所示:
SELECT e
FROM MyEntity e
WHERE e.field1 IN :collectionOfField1s
AND (e.status IS NULL OR TRIM(LOWER(e.status)) <> 'deleted')
选择e
来自MyEntity e
其中e.field1在:CollectionOffield1中
和(e.状态为空或修剪(较低(e.状态))‘已删除’)
另一种方法是使用称为COALESCE的特殊函数,如下所示:
SELECT e
FROM MyEntity e
WHERE e.field1 IN :collectionOfField1s
AND (TRIM(LOWER(COALESCE(e.status, 'deleted'))) <> 'deleted')
选择e
来自MyEntity e
其中e.field1在:CollectionOffield1中
和(修剪(较低(合并(即状态“已删除”))“已删除”)
在这种情况下,如果发现空值,则应假定为“已删除”值。如果这是MySQL数据库,第三种方法是使用
不同于运算符:TRIM(LOWER(e.status))“deleted”(已删除)
感谢您的回复。我很感激。我在你的回答中使用了第一种方法,效果很好。