【问题标题】:How to update an entity with Google App Engine Java with JPA?如何使用 JPA 使用 Google App Engine Java 更新实体?
【发布时间】:2011-12-04 06:39:21
【问题描述】:

我正在尝试使用 JPA 和 Google App Engine 更新实体。我开始一个事务,检索要更新的实体,更改一些字段,调用持久化并提交。一切都执行没有任何错误,但是实体没有被修改。

这里是示例代码:

EntityTransaction tx = entityManager.getTransaction();
try {
        tx.begin();
        DomainName domain = entityManager.find(DomainName.class, domainName);
        domain.setExists(body != null);
        domain.setHttpBody(body);
        domain.setHttpTimeStamp(new Date());
        entityManager.persist(domain);
        tx.commit();
} finally {
        if (tx.isActive()) {
                tx.rollback();
        }
}

我应该怎么做才能使用 JPA 持久化实体?

【问题讨论】:

    标签: java google-app-engine jpa


    【解决方案1】:

    不知道persist() 调用在做什么,因为对象(如果找到,您不会告诉我们)将处于托管状态,因此第一次更新字段会将对象标记为脏,并且将在 commit() 调用上提交。显然,对日志的简单检查会告诉您发生了什么。

    【讨论】:

    • 对象找到了,我也单步执行了代码,检查了检索到的对象,看起来没问题,日志中没有异常。
    • 我想我明白了,我实际上使用了两个不同的实体管理器(由 Spring 在两个不同的对象中连接),当我编写示例代码时,我对其进行了简化。所以在实践中你说我的示例代码是正确的并且应该可以工作。我要修复真正的程序,我相信它会起作用。
    • 好的,太好了,它运行良好。感谢您确认我在示例代码中所做的一切正常。所以我要带回家的教训是,在事务中只使用一个 EntityManager。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2014-03-20
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多