我有两个班员工和部门。
public class Employee {
int empId;
String empName;
Boolean isEmpAvailable;
String empAddress;
Department department;
}
public class Department {
int deptId;
String deptName;
}
我为Department.hbm.xml和Employee.hbm.xml类创建了hibernate文件文件
我想基于Department表中的deptid更新表Employee中的isEmpAvailable列。
这里我面临更新查询的问题,在阅读在线文档后我不清楚
public void updateEmployee(Employee emp, Department deptid){
String query= " update Employee set isEmpAvailable=? where deptid=?
Object[] values= {"true","133"};
getHibernateTemplate.update(query,values);
}
当我运行代码时,列不会得到更新。抛出错误 实体未被识别:更新员工设置isEmpAvailable =? deptid =?
我读过在线文档,其中包含getHibernateTemplate()方法,返回类型为整数。在这里,我喜欢通过调用dao.updateEmployee而不使用任何返回类型来直接更新数据库。我无法做到。请建议我
答案 0 :(得分:2)
hibernate中的更新是这样完成的:
String hqlUpdate =
"update Employee e " +
"set e.isEmpAvailable = :isEmpAvailable " +
"where e.deptid = :deptid";
int updatedEntities = session.createQuery( hqlUpdate )
.setBoolean( "isEmpAvailable", isEmpAvailable )
.setInt( "deptid", deptid )
.executeUpdate();
OR
String jpqlUpdate =
"update Employee e " +
"set e.isEmpAvailable = :isEmpAvailable " +
"where e.deptid = :deptid";
int updatedEntities = entityManager.createQuery( jpqlUpdate )
.setBoolean( "isEmpAvailable", isEmpAvailable )
.setInt( "deptid", deptid )
.executeUpdate();
OR
String hqlVersionedUpdate =
"update versioned Employee e " +
"set e.isEmpAvailable = :isEmpAvailable " +
"where e.deptid = :deptid";
int updatedEntities = s.createQuery( hqlUpdate )
.setBoolean( "isEmpAvailable", isEmpAvailable )
.setInt( "deptid", deptid )
.executeUpdate();
答案 1 :(得分:0)
如果需要,您也可以使用saveOrUpdate()
功能。在this link中有一个示例和一些文档。