【发布时间】:2014-01-29 16:36:24
【问题描述】:
有什么方法可以创建仅在一种特定类型中唯一的主键(假设我在这里问的是正确的问题!-如果没有,请道歉)我注意到有一个“IdentityType.APPLICATION”选项但“Application”似乎是“最小”的可用选项!
我有以下几点:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class AuditTrail
{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long ID;
@Persistent
private Date createDate;
@Persistent
private Long AdminID;
public AuditTrail()
{
this.createDate = new Date();
}
public AuditTrail(Long AdminID)
{
this();
this.setAdminID(AdminID);
}
}
但是当我创建一个新条目时,ID 在我的应用程序中的所有项目中都是唯一的,因此联系人、管理员、约会、服务等都是单独的“表”(或种类?)所以它好的,它们都是独一无二的,但是审计跟踪可以有自己的计数空间,这样它就不会干扰我的“实际数据”的计数
我是否以正确的方式问这个问题,我真的试图弄清楚这个实体/种类/属性/关键的东西,但我不确定我是否完全理解这一切实际上是如何运作的!
【问题讨论】:
-
是什么让您认为 id 在所有类型中都是独一无二的?生成的 id 对每种类型都是唯一的。否则
allocate_ids之类的设施将无法工作,因为您可以分配在种类之间重叠的 id 范围。 -
我可能没有使用正确的术语...我是说我的应用程序中“联系人”表(种类)中单行的 ID 似乎永远不会与例如“约会”表中的单行(种类)。这确实是“轶事”,但我注意到我的应用程序中的第一行是“管理员”,它的号码是 31014,接下来是“联系人”,它是 29003,第三行是 ID 为 31034 的“用户”,据我所知,没有冲突!
-
是的,不太可能发生冲突。这些 int 又大又稀疏。它类似于签名的 64 位。 (无法找到对密钥 id 定义的特定引用)。所以是的,从你有限的观察来看,它可能在所有类型中都是独一无二的。这是一个测试,手动为具有相同整数 id 的两种不同类型创建一个键。它会起作用的。 (假设你可以用 objectify 做这样的事情)
标签: google-app-engine google-cloud-datastore data-kinds