簡體   English   中英

休眠獲取服務中的分離對象,更改ID並再次保留

[英]Hibernate Get Detached Object in Service, alter the ID and persist again

我已經在這里和幾乎相同的地方問過這個問題 但是即時通訊正在尋找一種不同的方法。

我有Java Spring MVC應用程序。 員工說,我正在嘗試在一張桌子上做CRUD。

我試圖使用休眠從數據庫中獲取對象,進行一些更改, 包括更改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

上面我提到的問題中 ,我可以選擇使用復制COnstructor,復制除key以外的所有值,並在服務中設置其他值並保存。 它正在工作。

        employee = (Employee) employeeDao.get(key);
        employee = new Employee(employee);
        employee.setActive(false);
        employeeDao.save(employee);

我正在尋找其他方法。 如何從會話中將對象作為分離對象,更改包括ID的值,然后再次保留? 所有這些都應該在服務層中。

謝謝。

您可以使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM