Xodus 唯一 属性 键值
Xodus unique property key value
有没有办法在使用 PersistentEntityStore
存储时使实体 属性 唯一?
任何具有重复 属性 值的 put
操作都将转化为回滚或不应提交。这可能吗?
没有特定的方法来声明这样的索引。如果使用 PersistentEntityStore#executeInTransaction()
或 PersistentEntityStore#computeInTransaction()
来定义事务,那么可以直接在 lambda 中检查 属性 是否唯一:
entityStore.executeInTransaction(txn -> {
// ...
if (!txn.find("EntityType", "propertyName", propValue).isEmpty()) {
throw new ExodusException("Unique property violation");
}
entity.setProperty("propertyName", propValue);
// ...
});
这种设置属性的方式可以提取出来,例如,到一个Kotlin扩展函数中:
fun StoreTransaction.setProperty(entity: Entity, entityType: String, propName: String, propValue: Comparable<*>) {
if(!find(entityType, propName, propValue).isEmpty) {
throw ExodusException("Unique property violation: $propName = $propValue")
}
entity.setProperty(propName, propValue)
}
有没有办法在使用 PersistentEntityStore
存储时使实体 属性 唯一?
任何具有重复 属性 值的 put
操作都将转化为回滚或不应提交。这可能吗?
没有特定的方法来声明这样的索引。如果使用 PersistentEntityStore#executeInTransaction()
或 PersistentEntityStore#computeInTransaction()
来定义事务,那么可以直接在 lambda 中检查 属性 是否唯一:
entityStore.executeInTransaction(txn -> {
// ...
if (!txn.find("EntityType", "propertyName", propValue).isEmpty()) {
throw new ExodusException("Unique property violation");
}
entity.setProperty("propertyName", propValue);
// ...
});
这种设置属性的方式可以提取出来,例如,到一个Kotlin扩展函数中:
fun StoreTransaction.setProperty(entity: Entity, entityType: String, propName: String, propValue: Comparable<*>) {
if(!find(entityType, propName, propValue).isEmpty) {
throw ExodusException("Unique property violation: $propName = $propValue")
}
entity.setProperty(propName, propValue)
}