java - 将 GWT 与持久对象一起使用的正确方法是什么?

标签 java design-patterns gwt persistence jdo

我目前正在使用 GWT 通过 Google App 引擎开发一个简单的 Web 应用程序。应该指出的是,这是我第一次尝试这样的任务。

我遇到了以下问题/困境:

我有一个简单的类(getters/setters,仅此而已。为了清楚起见,我将这个类称为 DataHolder),我想让它持久化。为此,我使用了 JDO,它要求我添加一些注释,更具体地说,添加一个 Key 字段用作主键。

问题是使用 Key 类需要我导入 com.google.appengine.api.datastore.Key 这在服务器端没问题,但随后我不能在客户端使用 DataHolder,因为 GWT 不允许(据我所知)。

所以我创建了一个姊妹类 ClientDataHolder,它几乎是相同的,尽管它没有所有的 JDO 注释和 Key field 。

现在这确实有效,但感觉我做错了什么。使用这种方法需要为我希望拥有的每个实体维护两个单独的类。

所以我的问题是:有更好的方法吗?

谢谢。

最佳答案

您认为保留对象的两个版本感觉不对是正确的——GWT 的整个想法是您可以在客户端共享您的服务器端对象,如果您开始分离这两个版本,您就是没有充分利用 GWT。

关于解决您的问题,我只听说过关于 Objectify 的好消息,一个进入数据存储区的备用 API,专为 App Engine 构建。在其众多优点中,它也是 GWT 安全的,因此您可以在客户端和服务器之间来回传递 key 和所有内容。 Read more here .

但是,如果您想使用 JDO/JPA,您可以将您的实体 ID 存储为字符串或长整型,如下所示:

@PersistenceCapable(identityType = IdentityType.APPLICATION)  
public class SomeDomainClass implements Serializable {  
  @PrimaryKey  
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)  
  @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")  
  String id;
}

阅读更多相关信息 here (这是我无耻地偷了那个代码示例的地方)

关于java - 将 GWT 与持久对象一起使用的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2575065/

相关文章:

java - 为什么 '1' > 2 是错误的?

java - 如何用假测试模块替换 Guice 模块进行单元测试?

c# - C#中派生类的可视化

java - CellList 中的 GWT 自定义单元 - 未调用 render()

java - Google Eclipse 插件关于测试依赖项的警告

java - 从客户端 gwt 读取 web.xml init-params

java - 受另一个泛型限制的泛型类型

java - 如何在InputDialog中等待所需的输入?

c++ - 解耦自定义用户数据

ios - 我如何在 iOS 中设计/构建我的用户详细信息应用程序