关于Example查询的问题!

主题:关于Example查询的问题,个人认为会出小小问题的地方,自己总结一下吧。 :)
1.在 POJO 里属性为原始类型的查询情况,举例如下:
NewUser.java 中定义 age 为 int (其他属性均为封装类型)
......
private int age;
.....
public int getAge() {
return this.age;
}

public void setAge(int age) {
this.age = age;
}
......

映射文件和其他配置均准确。其中数据库中的记录如下表:
[img]C:\Documents and Settings\chenhao\桌面\aaa.bmp[/img]
现在用通过条件查询查查 name=tom 记录。代码如下:

......
NewUser user = new NewUser();
user.setName("tom");
List list = session.createCriteria(NewUser.class).add(Example.create(user)).list();
......

查询结果:
[quote]Hibernate: select this.id as id0_, this.name as name0_, this.age as age0_, this.image as image0_, this.resume as resume0_ from new_user this where (this.name=? and this.age=?)
hava no record [/quote]
可以看到这里并没有查询到想查的记录呕。请仔细看看 查询语句,会发现 and this.age=?这个条件。为什么呢?
[quote]其实 hibernate 在用Example的查询的时候是封装了一个样例对象,让后执行查询,这里由于age 为int类型,所以在封装时候age已经有个默认值0 ,这使得你的查询其实是在查询 name=tom ,age = 0的 记录,当然不能查到了。[/quote]
2.修改NewUser.java 里age 为Integer.并修改getter 和 setter 方法,做同样的查询:
结果如下:
[quote]Hibernate: select this.id as id0_, this.name as name0_, this.age as age0_, this.image as image0_, this.resume as resume0_ from new_user this where (this.name=?)
********************** result ****************
user id :1 user name : tom user age : 26
********************** end *******************[/quote]
再看看打印出的查询语句,已经没有age的条件了。这才是想要的结果。 :)

不知道这里说清楚这个问题了没有,请大家指点!

3.其实说这么多,就想说一个意思。就是在 pojo 里面最好用封装类型而不要用原始类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值