2016-03-25 3 views
0

Я использую экземпляр класса DB для получения данных и заполнения файла excel, во время процесса я изменяю поле Date, чтобы отобразить конкретную дату , и поскольку это экземпляр БД, когда я это делаю, он изменяет данные в БД.Java - использование экземпляра DB с 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 вместо самой сущности было бы лучше и элегантнее, чем вырезать объект из сеанса вручную.

Смежные вопросы