[英]What is the correct approach to using GWT with persistent objects?
我目前正在使用GWT通過Google App引擎開發一個簡單的Web應用程序。 應該注意的是,這是我第一次嘗試這種任務。
我遇到了以下問題/問題:
我有一個簡單的類(getters / setters,僅此而已。為了清楚起見,我將此類稱為DataHolder
),並且我想使其持久化。 為此,我使用了JDO
,它要求我添加一些注釋,更具體地說是添加一個Key
字段用作主鍵。
問題在於,使用Key
類需要我導入com.google.appengine.api.datastore.Key
,這在服務器端是可以的,但是由於GWT
不允許,我不能在客戶端使用DataHolder
(據我所知)。
因此,我創建了一個姐妹類ClientDataHolder
,該類幾乎相同,盡管它沒有所有的JDO
批注也沒有Key
字段。
現在這確實有效,但是感覺好像我做錯了。 使用這種方法將需要為我希望擁有的每個實體維護兩個單獨的類。
所以我的問題是:是否有更好的方法?
謝謝。
您認為保留兩個對象的版本感覺不對是正確的-GWT的整個想法是您可以在客戶端共享服務器端對象,並且如果您開始與這兩個對象離婚,您並不會完全GWT的優勢。
關於解決您的問題,除了Objectify之外 ,我什么都沒有聽到,這是為App Engine構建的數據存儲區中的備用API。 它具有許多優點,而且它也是GWT安全的,因此您可以在客戶端和服務器之間來回傳遞密鑰和所有內容。 在這里閱讀更多 。
但是,如果您想使用JDO / JPA,則可以將您的實體ID存儲為String或Longs,如下所示:
@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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.