【问题标题】:Spring entitymanagerSpring 实体管理器
【发布时间】:2015-03-01 13:10:05
【问题描述】:

我的应用程序遇到问题。我的应用程序从队列中读取消息并保存到数据库。插入记录是好的。但是在更新时,它会随机丢失。正确更新,但 10% 的记录没有随机更新。下面的大部分记录是我正在使用的代码的 sn-p:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

    @PersistenceContext
    protected EntityManager entityManager;

    @Override
    public int updateTransaction(AuditRequest auditRequest) throws TesException {

        LOG.info("updateTransaction : Updating Event Transaction");
        Query query = entityManager.createNamedQuery("updateEventTransactionQuery");
        query.setParameter("status", auditRequest.getStatus());
        query.setParameter("failureInfo", auditRequest.getFailureInfo());
        query.setParameter("endDateTimestamp", getTimestamp(auditRequest.getEndDateTime()));
        query.setParameter("transUID", auditRequest.getTransUID());
        query.setParameter("transaction", auditRequest.getTransaction());
        return query.executeUpdate();

    }

【问题讨论】:

  • 当您说没有更新时,您的意思是更新运行良好但更新了 0 行?
  • 是的,史蒂夫。查询.executeUpdate();当我说没有更新时返回 0。
  • Steve 我在收到对我的服务的请求时插入一条新记录,并在服务完成调用时更新相同的记录。下面是插入逻辑。
  • public EventTransaction insertTransaction(AuditRequest auditRequest) throws TesException { EventTransaction et= new EventTransaction(); et.setTransUID(auditRequest.getTransUID()); et.setTransaction(auditRequest.getTransaction()); et.setStartDateTimestamp(getTimestamp(auditRequest.getStartDateTime())); et.setStatus(auditRequest.getStatus()); et.setSourceType(auditRequest.getSourceType()); et.setSource(auditRequest.getSource()); et.setData(auditRequest.getData()); et= super.create(et);返回等; }

标签: spring entitymanager


【解决方案1】:

在运行查询之前需要刷新 EntityManager。看起来大多数时候这已经发生了,但是当新的 EventTransaction 尚未写入数据库时​​,没有什么可更新的。然后您的数据库事务提交,EntityManager 作为提交过程的一部分被刷新,将未更改的 EventTransaction 写入数据库。

【讨论】:

  • 感谢史蒂夫的快速响应。所以我需要在执行更新之后运行刷新,或者你的意思是在我运行更新查询之前。史蒂夫对为什么它在大多数情况下发生而在某些情况下没有发生的任何评论。
  • 更新查询前需要刷新。我的猜测是,大多数时候有一个干预提交或代码的其他部分调用刷新。
猜你喜欢
  • 2015-01-24
  • 1970-01-01
  • 2015-06-22
  • 2012-12-20
  • 2020-11-10
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多