java - 更新谷歌应用引擎数据存储中的查询(java)

标签 java google-app-engine jpa jdo

如何在与 gwt 一起使用时在 google app engine 中使用更新查询。我正在尝试制作一个聊天应用程序,除了提交和删除以前的消息外,管理员还可以编辑现有消息的部分内容。

要编辑现有消息,需要更新查询,但我在数据存储中找不到类似更新查询的内容。

我们如何更新现有数据?

最佳答案

这是来自 http://www.ibm.com/developerworks/java/library/j-gaej3.html 的一些示例代码 您可以执行 get 修改您的数据,然后进行持久化,然后提交。

参见附件代码中的 updateContact() 方法。

主要注意事项是跨实体执行此操作 - 注意:DataStore 中的数据存储不同于关系数据库。

package gaej.example.contact.server;

import gaej.example.contact.client.Contact;

import java.util.List;

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;

public class ContactJdoDAO implements ContactDAO {
    private static final PersistenceManagerFactory pmfInstance = JDOHelper
            .getPersistenceManagerFactory("transactions-optional");

    public static PersistenceManagerFactory getPersistenceManagerFactory() {
        return pmfInstance;
    }

    public void addContact(Contact contact) {
        PersistenceManager pm = getPersistenceManagerFactory()
                .getPersistenceManager();
        try {
            pm.makePersistent(contact);
        } finally {
            pm.close();
        }
    }

    @SuppressWarnings("unchecked")
    public List<Contact> listContacts() {
        PersistenceManager pm = getPersistenceManagerFactory()
                .getPersistenceManager();
        String query = "select from " + Contact.class.getName();
        return (List<Contact>) pm.newQuery(query).execute();
    }

    public void removeContact(Contact contact) {
        PersistenceManager pm = getPersistenceManagerFactory()
                .getPersistenceManager();
        try {
            pm.currentTransaction().begin();

            // We don't have a reference to the selected Product.
            // So we have to look it up first,
            contact = pm.getObjectById(Contact.class, contact.getId());
            pm.deletePersistent(contact);

            pm.currentTransaction().commit();
        } catch (Exception ex) {
            pm.currentTransaction().rollback();
            throw new RuntimeException(ex);
        } finally {
            pm.close();
        }
    }

    public void updateContact(Contact contact) {
        PersistenceManager pm = getPersistenceManagerFactory()
                .getPersistenceManager();
        String name = contact.getName();
        String phone = contact.getPhone();
        String email = contact.getEmail();

        try {
            pm.currentTransaction().begin();
            // We don't have a reference to the selected Product.
            // So we have to look it up first,
            contact = pm.getObjectById(Contact.class, contact.getId());
            contact.setName(name);
            contact.setPhone(phone);
            contact.setEmail(email);
            pm.makePersistent(contact);
            pm.currentTransaction().commit();
        } catch (Exception ex) {
            pm.currentTransaction().rollback();
            throw new RuntimeException(ex);
        } finally {
            pm.close();
        }
    }

}

关于java - 更新谷歌应用引擎数据存储中的查询(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2679759/

相关文章:

java - 使用jpa规范时如何在排序中应用合并表达式

java - @MockClass 不起作用

java - 尝试更改 Java 版本时,OSX 上的符号链接(symbolic link)困惑

javascript - Javascript函数什么时候执行? php 变量没有改变传入的参数

google-app-engine - App Engine 提供的 blob url 保持多长时间有效?

google-app-engine - 谷歌应用引擎是否支持 apache poi?

java - 如何将 DocumentSnapshot id 获取为字符串?

java - 如何在 Spring Boot 中为每个用户设置速率限制?

jpa - 如何通过 JDO、JPA 或 Objectify 访问 Google Cloud Datastore?

java - JPA + Hibernate OGM + 使用 Jackson 数据类型 Hibernate 进行延迟初始化