我问this Question here和它几乎相同。但我正在寻找一种不同的方法。
我有Java Spring MVC应用程序。我试图在一张桌子上做CRUD,比如员工。
我正在尝试使用hibernate从数据库中获取对象,执行一些更改包括更改ID ,然后再次保存。我在服务层
中这样做我的ServiceImpl
中有以下代码public class EmployeeServiceImpl extends GenericManagerImpl<Employee, Long> implements EmployeeService {
@Override
public void saveOld(Long key) {
employee = (Employee) employeeDao.get(key);
employee.setActive(false);
employee.setEmpKey(null);
employeeDao.save(employee);
}
}
但我得到例外。
org.springframework.orm.hibernate4.HibernateSystemException: identifier of an instance of com.table.model.Employee was altered from 4 to null; nested exception is org.hibernate.HibernateException: identifier of an instance of com.table.model.Employee was altered from 4 to null
从the Question I told above,我可以选择使用复制COnstructor,复制除键之外的所有值,并在服务中设置其他值并保存。它正在发挥作用。
employee = (Employee) employeeDao.get(key);
employee = new Employee(employee);
employee.setActive(false);
employeeDao.save(employee);
我正在寻找一个不同的apporach。如何将对象作为分离的对象从会话中获取,更改包括ID的值,然后再次保留?所有都应该在服务层。
感谢。
答案 0 :(得分:2)
您可以使用Commons BeanUtils
org.apache.commons.beanutils.PropertyUtils.copyProperties(dest,source);
如下所示
Employee source = (Employee) employeeDao.get(key);
Employee dest= new Employee();
org.apache.commons.beanutils.PropertyUtils.copyProperties( dest, source );
dest.setId(null);
dest.setActive(false);
employeeDao.save(dest);