如何使用JPA使用Google App Engine Java更新实体?

如何使用JPA使用Google App Engine Java更新实体?,java,google-app-engine,jpa,Java,Google App Engine,Jpa,我正在尝试使用JPA和Google App Engine更新一个实体。我启动一个事务,检索要更新的实体,更改几个字段,调用persist和commit。执行所有操作时都不会出现任何错误,但不会修改实体 以下是示例代码: EntityTransaction tx = entityManager.getTransaction(); try { tx.begin(); DomainName domain = entityManager.find(DomainName.c

我正在尝试使用JPA和Google App Engine更新一个实体。我启动一个事务,检索要更新的实体,更改几个字段,调用persist和commit。执行所有操作时都不会出现任何错误,但不会修改实体

以下是示例代码:

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持久化实体?

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

找到了对象,我也仔细检查了代码,检查了检索到的对象,看起来还不错,日志中没有异常。我想我明白了,我实际上使用了两个不同的实体管理器(由Spring在两个不同的对象中连接)当我编写示例代码时,我简化了它。所以在实践中,您是说我的示例代码是正确的,应该可以工作。我将修复真正的程序,我相信到时候它会工作。好的,很好,它工作得很好。感谢您确认我在示例代码中所做的一切正常。因此,我要吸取的教训是,在一个事务中只使用一个EntityManager。