Hibernate在服务中获取分离对象,更改ID并再次保留

时间:2014-11-27 05:21:45

标签: java hibernate jpa

我问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的值,然后再次保留?所有都应该在服务层。

感谢。

1 个答案:

答案 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);