对象里面有值,为啥报NUll异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象里面有值,为啥报NUll异常相关的知识,希望对你有一定的参考价值。

参考技术A 你List集合没有实例化,你直接用,不报错才怪 参考技术B 这个明显就是null啊,这个list的不是你定义的就是null吗?你要定义list不是null.如:List<Subject> name = new ArrayList();本回答被提问者采纳

为啥当参数为null时,postgres会抛出异常?

【中文标题】为啥当参数为null时,postgres会抛出异常?【英文标题】:Why when parameter is null, postgres throws an exception?为什么当参数为null时,postgres会抛出异常? 【发布时间】:2022-01-15 11:31:35 【问题描述】:
@Query(value = "select distinct m from MerchantStore m 
left join fetch m.parent mp left join fetch m.country mc 
left join fetch m.currency mc left join fetch m.zone mz 
left join fetch m.defaultLanguage md 
left join fetch m.languages mls where (?1 is null or m.storename like %?1%)",
countQuery = "select count(distinct m) from MerchantStore m where (?1 is null or m.storename like %?1%)")
    
Page<MerchantStore> listAll(String storeName, Pageable pageable);

我有上面的查询,但它抛出了以下异常:

PSQLException: ERROR: operator does not exist: character varying ~~ bytea
  Hint: No operator matches the given name and argument types. You might need to add explicit type casts.

当我将条件旋转到(m.storename like %?1% or ?1 is null) 时,它可以正常工作。

有人可以向我解释一下这里到底发生了什么吗? 附言这是来自 Shopizer 库 PageableMerchantRepository.java。

【问题讨论】:

?1 is null 是什么意思?就像storeName = "StarBucks" 你将拥有"starbucks" is null 实际发送到数据库的查询是什么? 您在哪个查询中轮换条件?那不应该是m.storename is null吗? @AlbertoSinigaglia 这是不想动态组合查询的程序员常用的(如果不幸的话)捷径。 “如果我提供 NULL 参数,则此表达式始终为真”是一种忽略表达式的另一个分支的方法,而无需将其从查询中删除。 @jjanes 那么我该如何解决呢?正确的方法是什么?这不是我的代码,我之前没有使用过 Query。他们写的每一个查询都是这样,当我设置数据库时,它们都不起作用。 【参考方案1】:

这可能是因为MerchantStore.storename 是一个不可为空的字段/列! ;)

(?1 is null or m.storename like %?1%)

显然 postgres 似乎不喜欢哪个(用我的话来说:“null 不是该列的有效'数据类型'”),而在:

(m.storename like %?1% or ?1 is null)

?1 is null(显然!?)从未评估过。

那就这样吧:

m.storename like %?1%

,并确保不传递空值/如何处理它们(like %null%like '%'?)。

【讨论】:

以上是关于对象里面有值,为啥报NUll异常的主要内容,如果未能解决你的问题,请参考以下文章

java问题:为啥这个list里面的实体类都是空的,但是实体类里面有值,dao层采用mybatis

mybatis if 判断在有值的情况下,有些能通过,有些不能通过,为啥????

java怎样判断list是不是有值

try catch处理流的异常

求高手解决一个sql问题,查询的每个sum里面基本都有值,但是我把他们相加后的sumnumber 为null,怎么回事

spring bean注入报空指针null,但set设值时对象是存在的,而且只是部分方法报空指针