这是我的DAO类

package com.sathya.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.sathya.util.HibernateUtil;

public class EmpDaoImpl implements IEmpDao
{
    private SessionFactory factory;
    public EmpDaoImpl()
    {
        factory=HibernateUtil.getSessionFactory();
    }

    public List findEmpsByDeptNum(int deptNumber)
    {
        Session session=factory.openSession();
        Query q=session.createQuery("from Employee e where deptNumber=?");
        q.setParameter(0, deptNumber);
        List list=q.list();
        session.close();
        return list;
    }


    public int updateEmpsByDeptNum(int deptNumber)
    {
        Session s=factory.openSession();
        Query qr=s.createQuery("Update Employee e set e.empSal=10000 where e.deptNumber");
        qr.setParameter(0, deptNumber);
        Transaction tx=s.beginTransaction();
        int i=qr.executeUpdate();
        tx.commit();
        s.close();
        return i;
    }
}

这是我的测试 class
package com.sathya.test;

import java.util.Iterator;
import java.util.List;

import com.sathya.dao.EmpDaoFactory;
import com.sathya.dao.IEmpDao;
import com.sathya.entity.Employee;

public class Test {

    public static void main(String[] args)
    {
        IEmpDao dao=EmpDaoFactory.getInstance();
        List list=dao.findEmpsByDeptNum(20);
        Iterator it=list.iterator();
        while(it.hasNext())
        {
            Employee e=(Employee)it.next();
            System.out.println(e);
        }
        System.out.println("-----------------------");
        int i=dao.updateEmpsByDeptNum(30);
        System.out.println("No.of rows updated:"+i);
    }
}

我遇到了类似波纹管的错误

警告:[DEPRECATION]在第1行附近遇到位置参数
HQL中的第52列:[来自com.sathya.entity.Employee e其中
deptNumber =?]。位置参数被认为已弃用;用
而是使用命名参数或JPA样式的位置参数。

最佳答案

对于警告,请更改

  Query q=session.createQuery("from Employee e where deptNumber=?");
  q.setParameter(0, deptNumber);


  Query q=session.createQuery("from Employee e where deptNumber=:num");
  q.setParameter("num", deptNumber);


意外的AST节点:。第1行,第63列附近[更新
com.sathya.entity.Employee e设置e.empSal = 10000,其中e.deptNumber]

据我所知,休眠更新不能使用别名。修改
  Query qr=s.createQuery("Update Employee e set e.empSal=10000 where e.deptNumber");
  qr.setParameter(0, deptNumber);


  Query qr=s.createQuery("Update Employee set empSal=10000 where deptNumber=:num");
  qr.setParameter("num", deptNumber);

09-10 09:46