使用executeUpdate()后数据不会更新

时间:2014-12-15 09:11:52

标签: java-ee jpa

所以我有以下代码来更新表。

@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 个答案:

答案 0 :(得分:1)

您可能在L2缓存中有一个陈旧版本的对象,并且因为您通过JPQL执行更新,所以它不会反映到缓存中。检查更改时尝试刷新实例

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

在您期望新数据的方法中执行此操作。