今天郁闷了2个小时,不停地试验,就是没成功……(试验什么呢?)就是这个,用HQL来查出一个List,条件是某个字段为空。
两个领域类:
public class User {
private String username;
private Group group;
// ------------- setter
// ------------- getter
}
public class Group {
private String groupName;
private List<User> users;
// ------------- setter
// ------------- getter
}
让你查数据库中所有group为空的(即加入组的)所有用户。
考!我们搞程序的难道这个都不会啊?嘿!你别说……我就他妈地试验了2个小时。不就是一个简单地使用HQL嘛!由于我是用Spring整合了Hibernate,所以就用了Spring的HibernateTemplate来快速开发。
我首先写了:
String hql = "from User as u where u.group=?"; return getHibernateTemplate().find(hql, null);
好了,多么明白的一句话啊!哈哈……错了(Debug查看返回的List的size为0)~恩……是不是不能用等于号"="来匹配啊?于是我又写了:
String hql = "from User as u where u.group is ?"; return getHibernateTemplate().find(hql, null);
哈哈!好了!结果……(Debug查看返回的List的size为0)~ 8是吧……是不是要用其他的匹配词啊?于是我再次操刀写了:
String hql = "from User as u where u.group like ?"; return getHibernateTemplate().find(hql, null);
我都开始怀疑我是程序员了……竟然会用 like 匹配……我笑笑地试了一下。废话,当然还是失败了(Debug查看返回的List的size为0)。啊啊啊啊啊啊啊啊!shit!我打电话给了朋友,问他到底怎么办(他们公司推行Hibernate的开发)。结果他说啥:“一般不会查空的值吧……我不知道……你再试试看,好了告诉我怎么弄……”我差点没昏过去……
突然间,我灵光乍现“我他妈的就把HQL写死了,难道他还不出来?”
String hql = "from User as u where u.group is null"; return getHibernateTemplate().find(hql);
他妈的成功了……不过确实差异。时候我上网有心地留意了这方面的东西,发现有一个人他是使用Hibernate原生的Session进行查询也是在设置传入参数中输入了null,结果也是没有得到正确的结果,比较诧异啊!
总之,不管如何,功能是实现了~值得“庆幸”


