Java 具有多个唯一密钥的数据存储实体

Java 具有多个唯一密钥的数据存储实体,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,这个问题已经提出了。但我现在的情况有点不同,我希望现在有更好的答案。下面是: 我需要一个数据存储实体有两个唯一的键,一个是主键 下列各项是否足够?当我对数据存储进行仅密钥查询时,我需要它来理解我指的是keyA @Entity public class UserAccount implements Serializable{ @Id @GeneratedValue(strategy=GenericType.IDENTITY) Key keyA;//based on email

这个问题已经提出了。但我现在的情况有点不同,我希望现在有更好的答案。下面是:

我需要一个数据存储实体有两个唯一的键,一个是主键

下列各项是否足够?当我对数据存储进行仅密钥查询时,我需要它来理解我指的是
keyA

@Entity
public class UserAccount implements Serializable{

  @Id
  @GeneratedValue(strategy=GenericType.IDENTITY)
  Key keyA;//based on email

  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  Key keyB;//randomly generated
  //….other data
}

我需要数据存储来帮助强制执行密钥的唯一性,因此仅让
keyB
成为我自己管理的简单字段是不够的。

您必须自己强制执行唯一性。在非主键上,您必须进行查找,看看是否得到结果

那么A键和B键的组合也必须是唯一的吗?顺便说一句,根据我的设计。你已经知道你的答案了,数据存储没有内置的对SQL的支持,比如“唯一索引”@Namphibian可能会告诉您将两个“ID”连接成一个唯一的密钥名。自我管理电子邮件属性的唯一性对于您的情况来说实际上已经足够好了,因为您没有让两个人同时使用同一封电子邮件创建两个
UserAccount
s的风险。。。