通过键获取对象
要通过对象的键检索对象,请使用 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);
如果某个对象的字段同样包含持久的子对象,则这些子对象也将被删除。有关详细信息,请参阅关系。
分享到:
相关推荐
为了解决这个问题,GAE提供了多种数据存储解决方案,包括Bigtable、Blobstore和Google Storage for Developers。这三种存储方法都有各自的特性和用途,适用于不同类型的存储需求。 1. **Bigtable (Datastore)**:...
- 通过 GAE,你可以创建一个简单的留言本应用,展示如何使用数据存储、用户身份验证和 Web 框架。 2. **开发环境** - 需要下载并安装 GAE SDK,它包含了开发和调试所需的工具。 - SDK 包含一个模拟 App Engine ...
GAE提供了自动扩展、负载均衡和数据存储等服务,无需担心服务器运维,开发者可以专注于应用的开发。 **Python** 是一种高级编程语言,以其简洁、易读的语法和强大的库支持而受到广泛欢迎。在Web开发领域,Python常...
GAE提供了一系列服务,如数据存储(使用NoSQL的Bigtable)、任务队列、邮件服务等,并有自动扩缩容能力。 【项目结构】 根据给出的文件列表,可以看出这是一个典型的Java Web项目结构: - `.classpath`:包含项目的...
开发者可以在GAE上托管后端服务,处理数据存储、任务调度、身份验证等各种任务。 项目中的文件名列表"wallet-angularjs-gae-master"表明这是一个Git仓库的主分支,通常包含以下组件: 1. `appengine-web.xml`:这...
在GAE上集成Google Cloud Storage (GCS) 可以实现高效的数据存储和访问,这对于需要大量文件操作的应用程序尤其有用。** **Cloud Drive应用程序是GAE上的一个示例应用,展示了如何通过GAE的API和GCS接口进行交互。...
数据存储区的活动记录 Gaerecords 是围绕 的轻量级包装器,提供 Active Record 和 DBO 风格的数据管理。 项目目标 初学者简单:让初学者可以轻松开始使用数据存储 熟悉:使使用数据存储的感觉与在其他 OO 语言中相同...
- `models/`: 应用的数据模型,可能包含了定义在GAE数据存储中的实体类。 - `handlers/`: 处理特定HTTP请求的处理器函数,每个端点可能会对应一个或多个处理器。 - `tests/`: 单元测试和集成测试,确保端点功能正确...
您将使用GCP的数据存储区(NoSQL数据库)存储照片的元数据,其中包括拍摄照片地点的摄影师的姓名,拍摄照片的日期和拍摄日期。 要存储实际的照片图像,您将使用GCP的Cloud Storage。 您的网络界面将至少包括以下...
它不包含测试用例,并且不会处理访问数据存储时出现的潜在错误。 还需要手动插入数据存储条目。安装说明将项目导入 Eclipse。 确保 App Engine SDK jar 存在于war/WEB-INF/lib目录中,方法是手动添加它们,或者让 ...
3. **任务队列**:GAE的任务队列服务,用于异步处理任务,例如邮件发送、数据分析等,可以提高系统性能并避免阻塞用户请求。 4. **Java后端**:项目使用Java语言编写后端逻辑,利用GAE的Java运行环境。 5. **项目...
这个gae-flightlog项目就是基于这个模板构建的,因此我们可以推断它会包含基本的Web服务端点、数据存储机制以及可能的用户认证等常见功能。 【标签】中的"Java"表明该项目使用Java编程语言。Google App Engine支持...
GAE 支持多种服务,如数据存储、任务队列、身份验证等,这使得 sisbarc-gae 能够高效、可扩展地运行。使用 Java 作为编程语言,开发者可以利用 JSP(Java Server Pages)、Servlets、Spring 框架等来构建后端逻辑。 ...
- Google App Engine的架构和工作原理,如自动缩放、负载均衡和数据存储选项。 - Java Web开发,包括Servlets、JSP、MVC模式等。 - 使用Maven进行项目管理和构建。 - Ajax技术的应用,包括XMLHttpRequest对象、JSON...
2. **Google App Engine的API**:如何使用GAE提供的服务,如数据存储(Datastore)、任务队列(Task Queues)和邮件服务等。 3. **Java Servlet和JSP**:如何处理HTTP请求,生成动态内容,以及使用JSP进行视图层的...
2. 云计算下的数据存储与安全 云技术可以显著扩大企业的数据储存量,而且云服务提供商通常会采用先进的安全措施,以确保用户数据的安全性。在本文中,作者提及使用GAE云平台中的相关技术和建立在BigTable基础上的GAE...
GAE提供了服务器、数据库、存储和其他基础设施,开发者无需关心运维细节。主要特点有: 1. **弹性伸缩**:根据应用负载自动调整资源,确保性能和可靠性。 2. **免费额度**:提供一定的免费资源,适合初创项目或小型...
GAE提供了包括Python、Java在内的多种语言支持,并且提供了数据存储、API调用、用户认证等丰富的服务组件。 标题中提到的“Google App Engine 入门教程”意味着本文将介绍如何开始使用GAE这一服务,而描述中提到了...
2. **Google App Engine**:开发者需要熟悉GAE的开发环境,如使用Google Cloud SDK进行设置,理解其服务限制(如数据存储的NoSQL数据库Bigtable,内存和CPU限制),以及如何使用GAE的调度器、监控和日志功能。...
GAE提供了一整套服务,如数据存储、任务队列、邮件服务以及自动缩放等功能,帮助开发者构建和托管高性能的Web应用。 **SDUpload功能解析** 1. **命令行界面**: SDUpload的命令行界面使得用户可以通过简单的命令来...