如果我有三个模型类 - Taxpayer
,Criminal
和Patient
- 我可以使用socialSecurityNumber
作为所有三个的密钥ID,还是我需要制作它甚至跨模型类也是独一无二的。
换句话说,应该是这样的:
String socialSecurityNumber = "123-45-6789";
Long now = new Long(System.currentTimeMillis()); // use time to create uniqueness
String name = now.toString() + "-" + socialSecurityNumber;
Key key = KeyFactory.createKey(getClass().getSimpleName(), name);
或者这个:
String socialSecurityNumber = "123-45-6789";
Key key = KeyFactory.createKey(getClass().getSimpleName(), socialSecurityNumber);
答案 0 :(得分:1)
是。密钥名称只是密钥的一部分,以及应用程序ID,实体类型和任何祖先密钥,因此可以在不同的模型中使用相同的密钥名称。
但是,请注意,社会安全号码是一个糟糕的主键,原因如下:
答案 1 :(得分:0)
如果它是单独的表,并且您确定它确实是主键(已知犯罪分子使用别名),我认为没有真正的问题。
请注意,我仍然会使用代理键作为Id,但这是因为我已经在这个区域变得教条,因为我看到很多“有意义的主键”突然改变或者情况发生变化所以主键是否定的更长的主键。
在普通字段中具有密钥的情况下(例如,具有唯一的索引约束),有更多选项可以处理发生的事情。