`

gae 数据存储说明 3

    博客分类:
  • gae
GAE 
阅读更多

通过键获取对象

要通过对象的键检索对象,请使用 PersistenceManager 的 getObjectById() 方法。该方法采用对象的类和键:

        Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");
        Employee e = pm.getObjectById(Employee.class, k);

如果类使用的键字段为未编码字符串 ID (String) 或数字 ID (Long),则 getObjectByID() 可以采用简单值作为键参数:

        Employee e = pm.getObjectById(Employee.class, "Alfred.Smith@example.com");

键参数可以为任何支持的键字段类型(字符串 ID、数字 ID、键值、编码键字符串),且类型可以与类中的键字段的类型不同。App Engine 必须能够从类名和提供的值派生出完整的键。字符串 ID 与数字 ID 是互斥的,因此使用数字 ID 的调用绝不会返回带字符串 ID 的实体。如果使用了键值或编码键字符串,则键必须引用类型由类表示的实体。

更新对象

使用 JDO 更新对象的一种方式是抓取对象,然后在返回该对象的 PersistenceManager 仍然处于打开状态的情况下对该对象进行修改。当关闭 PersistenceManager 时,会保留修改。例如:

public void updateEmployeeTitle(User user, String newTitle) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        Employee e = pm.getObjectById(Employee.class, user.getEmail());
        if (titleChangeIsAuthorized(e, newTitle) {
            e.setTitle(newTitle);
        } else {
            throw new UnauthorizedTitleChangeException(e, newTitle);
        }
    } finally {
        pm.close();
    }
}

因为 Employee 实例是由 PersistenceManager 返回的,所以 PersistenceManager 已知对 Employee 上的持久字段所做的任何修改,并将在 PersistenceManager 关闭时自动使用这些修改更新数据存储区。PersistenceManager 已知进行这些修改的原因是 Employee 实例已“附加”到 PersistenceManager。

您可以通过将类声明为“可分离”,在 PersistenceManager 关闭后对该对象进行修改。为此,请将 detachable 属性添加到@PersistenceCapable 批注:

import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class Employee {
    // ...
}

现在您可以在载入 Employee 对象的 PersistenceManager 关闭后读取和写入该对象的字段。下例说明分离对象的作用:

public Employee getEmployee(User user) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    pm.setDetachAllOnCommit(true);
    try {
        e = pm.getObjectById(Employee.class, "Alfred.Smith@example.com");
    } finally {
        pm.close();
    }
    return e;
}

public void updateEmployeeTitle(Employee e, String newTitle) {
    if (titleChangeIsAuthorized(e, newTitle) {
        e.setTitle(newTitle);
        PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            pm.makePersistent(e);
        } finally {
            pm.close();
        }
    } else {
        throw new UnauthorizedTitleChangeException(e, newTitle);
    }
}

分离对象是创建数据传输对象的一种良好的替代选择。有关使用分离对象的详细信息,请参阅 DataNucleus 文档

删除对象

要将对象从数据存储区中删除,请对该对象调用 PersistenceManager 的 deletePersistent() 方法。

        pm.deletePersistent(e);

如果某个对象的字段同样包含持久的子对象,则这些子对象也将被删除。有关详细信息,请参阅关系

分享到:
评论

相关推荐

    使用 Bigtable、Blobstore 和 Google Storage 实现 GAE 存储.doc

    为了解决这个问题,GAE提供了多种数据存储解决方案,包括Bigtable、Blobstore和Google Storage for Developers。这三种存储方法都有各自的特性和用途,适用于不同类型的存储需求。 1. **Bigtable (Datastore)**:...

    GAE入门教程.pdf

    - 通过 GAE,你可以创建一个简单的留言本应用,展示如何使用数据存储、用户身份验证和 Web 框架。 2. **开发环境** - 需要下载并安装 GAE SDK,它包含了开发和调试所需的工具。 - SDK 包含一个模拟 App Engine ...

    小学期GAE项目 python+Django框架实现的博客

    GAE提供了自动扩展、负载均衡和数据存储等服务,无需担心服务器运维,开发者可以专注于应用的开发。 **Python** 是一种高级编程语言,以其简洁、易读的语法和强大的库支持而受到广泛欢迎。在Web开发领域,Python常...

    Struts2,Spring,JDO,AJAX on GAE

    GAE提供了一系列服务,如数据存储(使用NoSQL的Bigtable)、任务队列、邮件服务等,并有自动扩缩容能力。 【项目结构】 根据给出的文件列表,可以看出这是一个典型的Java Web项目结构: - `.classpath`:包含项目的...

    wallet-angularjs-gae

    开发者可以在GAE上托管后端服务,处理数据存储、任务调度、身份验证等各种任务。 项目中的文件名列表"wallet-angularjs-gae-master"表明这是一个Git仓库的主分支,通常包含以下组件: 1. `appengine-web.xml`:这...

    gae_clouddrive:Google App Engine (GAE) 上的 Cloud Drive 应用程序

    在GAE上集成Google Cloud Storage (GCS) 可以实现高效的数据存储和访问,这对于需要大量文件操作的应用程序尤其有用。** **Cloud Drive应用程序是GAE上的一个示例应用,展示了如何通过GAE的API和GCS接口进行交互。...

    谷歌师兄的leetcode刷题笔记-gae-records:Go中GoogleAppEngine数据源的ActiveRecord包装

    数据存储区的活动记录 Gaerecords 是围绕 的轻量级包装器,提供 Active Record 和 DBO 风格的数据管理。 项目目标 初学者简单:让初学者可以轻松开始使用数据存储 熟悉:使使用数据存储的感觉与在其他 OO 语言中相同...

    appinfo-endpoint:GAE 上的 AppInfo 端点

    - `models/`: 应用的数据模型,可能包含了定义在GAE数据存储中的实体类。 - `handlers/`: 处理特定HTTP请求的处理器函数,每个端点可能会对应一个或多个处理器。 - `tests/`: 单元测试和集成测试,确保端点功能正确...

    CSC847_GAE_Proj2_VisionAPI

    您将使用GCP的数据存储区(NoSQL数据库)存储照片的元数据,其中包括拍摄照片地点的摄影师的姓名,拍摄照片的日期和拍摄日期。 要存储实际的照片图像,您将使用GCP的Cloud Storage。 您的网络界面将至少包括以下...

    gae-webmonitor:用于跟踪 Google AppEngine 网页更改的简单 Web 监视器

    它不包含测试用例,并且不会处理访问数据存储时出现的潜在错误。 还需要手动插入数据存储条目。安装说明将项目导入 Eclipse。 确保 App Engine SDK jar 存在于war/WEB-INF/lib目录中,方法是手动添加它们,或者让 ...

    entass3cms:带有休息服务器和任务队列的 ass3 前端 gae 应用程序

    3. **任务队列**:GAE的任务队列服务,用于异步处理任务,例如邮件发送、数据分析等,可以提高系统性能并避免阻塞用户请求。 4. **Java后端**:项目使用Java语言编写后端逻辑,利用GAE的Java运行环境。 5. **项目...

    gae-flightlog

    这个gae-flightlog项目就是基于这个模板构建的,因此我们可以推断它会包含基本的Web服务端点、数据存储机制以及可能的用户认证等常见功能。 【标签】中的"Java"表明该项目使用Java编程语言。Google App Engine支持...

    sisbarc-gae:使用在 GAE 上运行的 Arduino、Android 和 JAVA WEB 技术的应用程序。 此应用程序的目的和对家庭自动化的介绍

    GAE 支持多种服务,如数据存储、任务队列、身份验证等,这使得 sisbarc-gae 能够高效、可扩展地运行。使用 Java 作为编程语言,开发者可以利用 JSP(Java Server Pages)、Servlets、Spring 框架等来构建后端逻辑。 ...

    gae-blog:我为 CP300 培训写的博客

    - Google App Engine的架构和工作原理,如自动缩放、负载均衡和数据存储选项。 - Java Web开发,包括Servlets、JSP、MVC模式等。 - 使用Maven进行项目管理和构建。 - Ajax技术的应用,包括XMLHttpRequest对象、JSON...

    guestbook:使用Java和Mavin的带有GAE的示例项目

    2. **Google App Engine的API**:如何使用GAE提供的服务,如数据存储(Datastore)、任务队列(Task Queues)和邮件服务等。 3. **Java Servlet和JSP**:如何处理HTTP请求,生成动态内容,以及使用JSP进行视图层的...

    云计算下的可配置人力资源管理系统设计分析.pdf

    2. 云计算下的数据存储与安全 云技术可以显著扩大企业的数据储存量,而且云服务提供商通常会采用先进的安全措施,以确保用户数据的安全性。在本文中,作者提及使用GAE云平台中的相关技术和建立在BigTable基础上的GAE...

    部署一个简单GWT应用到Google App Engine

    GAE提供了服务器、数据库、存储和其他基础设施,开发者无需关心运维细节。主要特点有: 1. **弹性伸缩**:根据应用负载自动调整资源,确保性能和可靠性。 2. **免费额度**:提供一定的免费资源,适合初创项目或小型...

    Google App Engine 入门教程

    GAE提供了包括Python、Java在内的多种语言支持,并且提供了数据存储、API调用、用户认证等丰富的服务组件。 标题中提到的“Google App Engine 入门教程”意味着本文将介绍如何开始使用GAE这一服务,而描述中提到了...

    分享:集成了Django1.0 的Google App Engine开发 模板项目

    2. **Google App Engine**:开发者需要熟悉GAE的开发环境,如使用Google Cloud SDK进行设置,理解其服务限制(如数据存储的NoSQL数据库Bigtable,内存和CPU限制),以及如何使用GAE的调度器、监控和日志功能。...

    SDUpload 0.1.rar

    GAE提供了一整套服务,如数据存储、任务队列、邮件服务以及自动缩放等功能,帮助开发者构建和托管高性能的Web应用。 **SDUpload功能解析** 1. **命令行界面**: SDUpload的命令行界面使得用户可以通过简单的命令来...

Global site tag (gtag.js) - Google Analytics