我试图找出如何在唯一ID之外的字段中强制执行唯一性。
示例:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class User implements IsSerializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String name;
@Persistent
private String email; // <= I want this to be unique as well
}
在上面的示例中,如何在整个数据库中强制实施电子邮件值的唯一性?
丹尼尔
答案 0 :(得分:11)
目前没有使用应用引擎数据存储区的内置方式。例如,请参阅this datanculeus ticket。 (请注意,JDO本身确实有一个@unique注释。)
“伪造”的一种方法是使用电子邮件本身作为密钥创建另一种名为Email的类/类,并将用户的密钥作为属性。由于电子邮件现在是一个密钥,它将被强制为唯一。只需确保您的电子邮件实体是顶级实体,而不是其关联用户的子级。您还必须密切关注您对交易的使用,以确保如果两个用户尝试在同一时间使用同一封电子邮件,则不要让重复的内容泄漏。
答案 1 :(得分:6)
我编写了一个类来处理向App Engine实体添加唯一字段的所有功能。请随意使用它。
在项目中插入此类,只需添加get和update方法,并提供实体名称,字段名称和唯一字段值
源代码可在此处获取:
答案 2 :(得分:1)
目前尚不支持此功能。如果您决定在项目中编写DAO层(不是一个坏主意),您可以执行一个查询,以测试MyObjectDAO.addMyObject(o)中您想要的任何限制,这将导致MySuperDuplicateValueException。