使用PersistentEntityStore存储时,有没有办法使Entity属性唯一?

这样的话,比任何具有重复属性值的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)
}

关于java - Xodus唯一属性键值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52842227/

10-13 09:12