使用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);
高手们再看看 展开
相关代码如下:
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);
高手们再看看 展开
5个回答
展开全部
代码没有什么问题,应该是本身没有查询出结果,设置show_sql,把后台打印的sql语句带入你传递的参数执行一下,看是否可以直接在数据库中查询出结果。
有可能是你传的etype里带空格,设置的时候调下trim()方法去空格试试
elist = session.createQuery("from CityEvent event where event.type=?").setString(0, etype.trim()).list();
有可能是你传的etype里带空格,设置的时候调下trim()方法去空格试试
elist = session.createQuery("from CityEvent event where event.type=?").setString(0, etype.trim()).list();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题1:你的事务呢?
问题2:HQL语句中 小写的event是什么?自己写的名字吗?还有event.type=?是什么为什么要这样写呢?模糊查询,精确查找?都不像嘛。。。
事务是从session中取得的,
而session是从SessionFactory中取得的,
Session session = SessionFactory.openSession();//像你那样写就可以了!
Transaction tran = session.beginTransaction(); //必须得有
//Transaction tran = new ....你应该这样写
事务开始-》数据操作(增,删,查,改)-》事务结束-》出现异常(事务回滚)就是。。。比如:tran.roback ....
不明白的就M我
问题2:HQL语句中 小写的event是什么?自己写的名字吗?还有event.type=?是什么为什么要这样写呢?模糊查询,精确查找?都不像嘛。。。
事务是从session中取得的,
而session是从SessionFactory中取得的,
Session session = SessionFactory.openSession();//像你那样写就可以了!
Transaction tran = session.beginTransaction(); //必须得有
//Transaction tran = new ....你应该这样写
事务开始-》数据操作(增,删,查,改)-》事务结束-》出现异常(事务回滚)就是。。。比如:tran.roback ....
不明白的就M我
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我看了前面几个的回答,好像都没回答道点子上。
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语句到数据库里去查询,看能否查出来。
希望上面的回答对你有帮助:)
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语句到数据库里去查询,看能否查出来。
希望上面的回答对你有帮助:)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
("from CityEvent event where event.type=?")
from后面跟对应的类名不是表名,大小写也要注意的,还有就是你的类名是叫CityEvent event吗?好像不应该有空格的吧
from后面跟对应的类名不是表名,大小写也要注意的,还有就是你的类名是叫CityEvent event吗?好像不应该有空格的吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询