我目前正在使用 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/