2016-03-25 83 views
0

我正在使用DB類的實例來獲取數據並填充excel文件,在此過程中,我更改了Date字段以顯示特定日期,因爲它是一個數據庫實例,所以當我這樣做時,它會更改數據庫中的數據。Java - 使用數據庫實例與SQL Server進行XLS導出

List<UserInstance> instances = em.createQuery("...query...") 
           .setParameter("accountNumber", accountNumber) 
           .getResultList();   

List<Object[]> instancesUsed = em.createNativeQuery("...query...") 
           .setParameter(1, accountNumber) 
           .getResultList(); 

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

for (UserInstance p: instances) { 
    for(Object[] o: instancesUsed) { 
     if (o[0].toString().equals(p.getNumber())) { 
       try { 
        p.setLastUsedDate(df.parse(o[4].toString())); 
       } catch (ParseException e) { 
        e.printStackTrace(); 
       } 
       break; 
      } 
     } 
    } 
} 

我想改變的實例中的數據(setLastUsedDate)不改變數據庫,我怎麼處理這個問題?我可以在某種臨時實例中複製實例嗎?

回答

0

發生這種情況是因爲你的對象目前是託管的(連接到一個會話),所以你對它做的任何事情都會反映在數據庫上,而不會調用persist/update。

您可以使用Session.evict()EntityManager.detach(object)(用於JPA)從會話中分離對象,但我認爲這不是最佳解決方案。

我認爲使用DTO代替實體本身會比手動從會話中驅逐對象更好,更優雅。

相關問題