Hibernate的findByExample莫名加入了值为空的的属性做查询条件

一直以来我都没有用过Hibernate的findByExample()方法,前几天有一个见得的搜索功能需要实现。于是我想着测试一下该方法(懒得写SQL)。了解一下机制。

ZcDO zcDO = new ZcDO()
zcDO.setZcmc("投影仪")
zcDao.findByExample(zcDO)

在终端输出结果:

select ... from ... where (this_.NUM=? and this_.PRICE=? this_.ZCMC=? )

这里有问题,我明明只赋值了zcmc,为什么搜索条件奇怪的加入了“为空”的两个属性。不是说好的会忽视null属性吗?然后我看了一下ZcDO类。

...
private int num;
private double price;
...

问题出在这,这两个属性的类型都是Java中的基本数据类型,如果么有初始化,就会被赋值默认值。

byte0
int0
long0L
char‘u0000’
float0.0f
double0
booleanfalse
所有引用类型null

那怎么办?难道得自己写sql语句来查询吗?不不不,有一个解决办法,那就是包装类

byteByte
booleanBoolean
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble

包装类是类,为了弥补基本数据类型不能面向对象。这些类的用途主要包含两种:

  1. 作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。

  2. 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。


对象引用的默认值是什么来着,对,null,说了那么多废话解决问题的根本就在这。把zcDO类中基本数据类型的属性改成包装类。

...
private Integer num;
private Double price;
...

再次执行findByExample()方法。终端输出:

select ... from ... where (this_.ZCMC=? )

最后总结一下findByExample()方法:

  1. 不支持主键
  2. 不支持关联
  3. 不支持NULL
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值