简体   繁体   English

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

[英]Update query in google app engine data store (java)

How to use the update query in google app engine while using with gwt. 如何在使用gwt时在Google App引擎中使用更新查询。 I'm trying to make a chat application where apart from submitting and deleting the previous messages, the administrator can edit out the portions of existing messages. 我正在尝试创建一个聊天应用程序,除了提交和删除以前的消息之外,管理员还可以编辑现有消息的部分内容。

For editing the existing messages update query is needed and I could not find anything like update query in data store. 要编辑现有消息,需要更新查询,我在数据存储中找不到类似更新查询的内容。

How can we update the existing data? 我们如何更新现有数据?

Here is some sample code from http://www.ibm.com/developerworks/java/library/j-gaej3.html You can do a get modify your data then a make persistent and then commit. 以下是来自http://www.ibm.com/developerworks/java/library/j-gaej3.html的一些示例代码您可以执行修改数据然后执行make persistent然后提交。

See the updateContact() method in the attached code. 请参阅附加代码中的updateContact()方法。

The main caveat is doing this across entities - Note: Data storage in the DataStore is different than a relational DB. 主要的警告是跨实体执行此操作 - 注意: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();
        }
    }

}

Calling makePersistent() on an entity that has been retrieved or previously inserted will update the entity in the datastore. 在已检索或先前插入的实体上调用makePersistent()将更新数据存储区中的实体。 See the docs . 查看文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM