使用Hibernate的HQL怎么条件查询老师返回空的list?高手帮忙看看

正在一个Dao实现类中编写一个方法根据活动类型查找所有相应类型的活动信息(分类查询),但是总是返回的list的size为0也就是查询不到,不知道为什么,请教有经验的高手,... 正在一个Dao实现类中编写一个方法根据活动类型查找所有相应类型的活动信息(分类查询),但是总是返回的list的size为0也就是查询不到,不知道为什么,请教有经验的高手,有点郁闷额。。。
相关代码如下:
public List<CityEvent> getCityEventByType(String etype){

Session session = getSession();
List<CityEvent> elist = null;
try{

elist = session.createQuery("from CityEvent event where event.type=?")
.setString(0, etype)
.list();
//System.out.println("list size:"+elist.size());
session.close();
}catch(HibernateException ex){
ex.printStackTrace();
throw ex;
}

return elist;
}
有什么其他需要知道的尽管说明,我补充上
type是一个字段,不是关键字,type就是event的活动类型的意思吧。我就是要根据type来查找相应活动类型的所有event。但是如果我制定要查找如type='music'这样是可以的list有值,但是我一旦加入了参数就出问题,返回list为0,就像上面代码。并且那个type值可以打印出来。不知道这样传参是正确的吗?
为了明确问题再补充下:我这样是可以的:
elist = session.createQuery("from CityEvent event where event.type=?").setString(0, "music").list();
但是这样传入动态参数就不行了返回空的list
elist = session.createQuery("from CityEvent event where event.type=?").setString(0, etype).list();
什么原因?
再次补充:我用System.out.println()打印etype结果显示的是"music",是带着""的,这样没有关系吗?在Action中是这样传参与调用的:
type = request.getParameter("type");
typeresult = dao.getCityEventByType(type);
高手们再看看
展开
 我来答
书乐天0A2
2009-06-09 · TA获得超过722个赞
知道小有建树答主
回答量:137
采纳率:0%
帮助的人:248万
展开全部
代码没有什么问题,应该是本身没有查询出结果,设置show_sql,把后台打印的sql语句带入你传递的参数执行一下,看是否可以直接在数据库中查询出结果。

有可能是你传的etype里带空格,设置的时候调下trim()方法去空格试试
elist = session.createQuery("from CityEvent event where event.type=?").setString(0, etype.trim()).list();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
躲错气9
2009-06-09 · TA获得超过684个赞
知道小有建树答主
回答量:936
采纳率:0%
帮助的人:589万
展开全部
问题1:你的事务呢?
问题2:HQL语句中 小写的event是什么?自己写的名字吗?还有event.type=?是什么为什么要这样写呢?模糊查询,精确查找?都不像嘛。。。

事务是从session中取得的,
而session是从SessionFactory中取得的,
Session session = SessionFactory.openSession();//像你那样写就可以了!
Transaction tran = session.beginTransaction(); //必须得有

//Transaction tran = new ....你应该这样写
事务开始-》数据操作(增,删,查,改)-》事务结束-》出现异常(事务回滚)就是。。。比如:tran.roback ....

不明白的就M我
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
woxiangbo
2009-06-09 · TA获得超过156个赞
知道答主
回答量:117
采纳率:0%
帮助的人:80.2万
展开全部
我看了前面几个的回答,好像都没回答道点子上。
elist = session.createQuery("from CityEvent event where event.type=?")
.setString(0, etype).list();
你这句有问题,你这么写:
String hql="from CityEvent event where event.type=:type";
elist =session.createQuery(hql).setString("type",etype).list();
另外有两个问题我不太确定:
第一:type是String类型吗?如果是,把hql改成这样试试:
String hql="from CityEvent event where event.type=':type'";
第二:传进去的参数etype 的值是多少?可以打印出来看看。
给你个建议,如果知道etype的值,那么hql语句就知道了,可以直接变成sql语句到数据库里去查询,看能否查出来。
希望上面的回答对你有帮助:)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙誓不懂情
2009-06-09 · 超过17用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:17.1万
展开全部
("from CityEvent event where event.type=?")
from后面跟对应的类名不是表名,大小写也要注意的,还有就是你的类名是叫CityEvent event吗?好像不应该有空格的吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hanyuer83
2009-06-09
知道答主
回答量:6
采纳率:0%
帮助的人:3.6万
展开全部
MS 你少了一个AS
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式