我對使用java和google appengine數據存儲還是比較新的。關鍵字和appengine數據存儲中的獨特行
我可以將數據放入數據存儲中並將其從數據存儲中取出,並且我正在嘗試使用戶無法輸入兩次。 由於數據存儲上沒有唯一索引,因此我將用戶電子郵件地址的散列設置爲主鍵。奇怪的是,當我多次輸入相同的數據時,它被輸入到數據存儲區(我認爲它會返回一個錯誤,或者什麼都不做)。
因此,當我將我的emailhash設置爲'2'進行測試,然後運行插入腳本一堆,並查詢WHERE _emailHash ='2',我得到3個結果。
這裏是我定義用戶的類。
@Entity public class user { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long _uid; @PrimaryKey private String _emailHash; private String _firstName; private String _lastName; private String _email; private String _password; public Long getUid() { return _uid; } public String getEmailHash(){ return _emailHash; } public void setEmailHash(String emailHash) { _emailHash = emailHash; } public String getFirstName() { return _firstName; } public void setFirstName(String firstName) { _firstName = firstName; } public String getLastName() { return _lastName; } public void setLastName(String lastName) { _lastName = lastName; } public String getEmail() { return _email; } public void setEmail(String email) { _email = email; } public String getPassword() { return _password; } public void setPassword(String password) { _password = password; } }
在谷歌文檔說以下
an entity ID ("key name") provided by the application when the object is created. Use this for objects without entity group parents whose IDs should be provided by the application. The application sets this field to the desired ID prior to saving. import javax.jdo.annotations.PrimaryKey; // ... @PrimaryKey private String name;
在 http://code.google.com/appengine/docs/java/datastore/creatinggettinganddeletingdata.html
有沒有更好的辦法保證不重複?或者我必須在插入前檢查每個值是否存在?
-------------------------- UPDATE ------------------- --------------------------- 根據德米特里的迴應,我混合了JPA和JDO(或者至少弄混了這兩者)。現在,我已經得到了整理出來,我哈希處理的電子郵件的定義是這樣的
@Id @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true") private String _emailHash; @GeneratedValue(strategy = GenerationType.IDENTITY) private Long _uid;
努力與
$pm = EMF::createEntityManager(); $user = new user(); $user->setEmailHash('5'); $user->setFirstName('test5'); $user->setLastName('test5'); $user->setEmail('test5'); $pm->persist($user);
我收到以下錯誤,用戶不幸的是,當
Invalid primary key for com.nextweeq.scheduler.user. The primary key field is an encoded String but an unencoded value has been provided
到目前爲止,我的搜索正在返回一些關於指定鍵名的內容,但我還沒有完全找到解決方案。你指的是
感謝德米特里,可能已經第一個問題,但與使用「數據存儲區中相應的實體」的沒有一個名字,我不知道現在我收到錯誤我完全明白。 – pedalpete 2010-01-12 01:15:21