使用PersistentEntityStore
存储时,是否可以使Entity属性唯一?
具有任何重复属性值的put
操作都会转化为回滚或不应提交。这可能吗?
答案 0 :(得分:1)
没有声明这种索引的特定方法。如果使用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)
}