这是我的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);