2014-12-15 5 views
0

У меня есть следующий код для обновления таблицы.Данные не обновляются после использования executeUpdate()

@Override 
public SalarySupplementModel update(SalarySupplementModel obj) { 
    EntityManager em = super.getEntityManager(); 
    Query qry = em.createQuery("UPDATE SalarySupplementModel s " 
     + "SET s.advanceDeduction = :adv, s.cit = :cit, s.allowance = :ia, " 
     + "s.specialAllowance = :isp, s.insurance = :ins, s.others = :ot, " 
     + "s.tds = :tds, s.transportAllowance = :ta, " 
     + "s.vehicleDeduction = :vd WHERE s.salSupId = :sid"); 

    qry.setParameter("adv", obj.getAdvanceDeduction()); 
    qry.setParameter("cit", obj.getCit()); 
    qry.setParameter("ia", obj.getAllowance()); 
    qry.setParameter("isp", obj.getSpecialAllowance()); 
    qry.setParameter("ins", obj.getInsurance()); 
    qry.setParameter("ot", obj.getOthers()); 
    qry.setParameter("tds", obj.getTds()); 
    qry.setParameter("ta", obj.getTransportAllowance()); 
    qry.setParameter("vd", obj.getVehicleDeduction()); 
    qry.setParameter("sid", obj.getSalSupId()); 

    qry.executeUpdate();   

    return obj; 
} 

Однако после его сохранения обновление не отображается до тех пор, пока я не перезапущу сервер.

Что именно я здесь не хватает?

+1

Что вы подразумеваете под словом "not show up"? – Markus

+0

Извините неправильную формулировку. Я имею в виду, что данные не обновляются, когда я пытаюсь перезагрузить данные. – Rabin

+0

Как там обрабатываются транзакции? Получают ли данные в базу данных? Что означает «после того, как я его сохраню»? В каком контексте называется код? Вызывает ли код вызов? – Markus

ответ

1

Возможно, у вас есть устаревшая версия объекта в кеше L2, и поскольку вы выполняете обновление через JPQL, оно не отображается в кеш. Попробуйте обновить экземпляр при проверке изменений.

SalarySupplementModel ssm = em.find(SalarySupplementModel.class, ssm.getId()); 
em.refresh(ssm); 

Сделайте это в том виде, в котором вы ожидаете свежих данных.

+0

Я не увенчался успехом. Я получаю сообщение об ошибке, говоря, что объект не управляется. – Rabin

+1

Попробуйте использовать этот 'ssm = em.find (SalarySupplementModel.class, ssm.getId()); em.refresh (ssm); ' –

+0

Wow. Это, наконец, сработало для меня. Большое спасибо, ты только что сделал свой день. :) – Rabin