Hibernate的hql使用和Hibernate报错汇总

最近做个简单的登录demo,发现总是报错,如下:

  

1.     org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2235)


原因是调用了sessionFactory.getCurrentSession().createSQLQuery(hql); 因为入参是hql语句,而不是原生的sql语句。

另外:

    hibernate 中createQuery与createSQLQuery两者区别是:
前者用的hql语句进行查询,后者可以用sql语句查询
前者以hibernate生成的Bean为对象装入list返回
后者则是以对象数组进行存储
所以使用createSQLQuery有时候也想以hibernate生成的Bean为对象装入list返回,就不是很方便
突然发现createSQLQuery有这样一个方法可以直接转换对象
Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);
XXXXXXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean。


2.     java.lang.IllegalArgumentException: Parameter username does not exist as a named parameter in [from User u where u.username=?]
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:380)
at org.hibernate.impl.AbstractQueryImpl.setInteger(AbstractQueryImpl.java:632)


      原因:

     调用代码:

      

    String hql="from User u where u.username=?";
		try 
		{
			Query query=sessionFactory.getCurrentSession().createQuery(hql);
			query.setInteger("username", Integer.parseInt(username));
			List list=query.list();
         因为query.setInteger的参数username虽然在数据库列有存在,但在hql语句里,username没设定,修改如下:
        <pre name="code" class="java">String hql="from User u where u.username=:<strong>uname</strong>";
		try 
		{
			Query query=sessionFactory.getCurrentSession().createQuery(hql);
			query.setInteger("<strong>uname</strong>", Integer.parseInt(username));
			List list=query.list();

 问题解决。 




未完....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值