GAE与数据存储(JDO)

时间:2012-07-01 04:13:21

标签: google-cloud-datastore jdo

我是GAE的新手,特别是Datastore(JDO)

我有一个Object Composition:User对象有一个Contact对象的引用。 我可以将它们存储在数据存储区中。但是代码允许存储具有相同“用户名”的多个对象,该用户名被定义为主键。

以下是代码段

//User class

@PersistenceCapable (identityType = IdentityType.APPLICATION)
public class User{

@PrimaryKey
@Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY) 
String username;

@Persistent
Contact contact;
//getters and setters
}


// Contact  class

@PersistenceCapable (identityType = IdentityType.APPLICATION)
public class Contact {

@PrimaryKey    
@Persistent (valueStrategy = IdGeneratorStrategy.IDENTITY) 
private Key username; 

@Persistent
String Phone1;
}



//DAO class
public void register()  {
User user = new User();
user.setUserName("abc");

Contact contact=new Contact();
contact.setEmail("abc@gmail.com");
user.setContact(contact);
pm.makePersistent(user);
}

如果我将此注册方法调用两次(或相当于使用相同的用户名和电子邮件ID提交两次注册表单),则数据存储区不会抱怨重复键异常。

由于我正在创建“用户名”作为我的KEY,我希望得到重复的密钥Exception。但为什么这不会发生?

感谢 马

1 个答案:

答案 0 :(得分:0)

什么是“同一组用户名和电子邮件”?您可以通过JDO将用户名设置为自动生成,因此它会为您生成该字段的值。因此它是独一无二的。因此没有例外。