我想在数据库中创建具有唯一标识的状态。以下是我的状态代码:
data class SampleState(
val partyA: Party,
val partyB: Party,
val value: Int,
val id: String,
override val linearId: UniqueIdentifier = UniqueIdentifier(id),
val properties: LCProperties = LCProperties("ABC")) : LinearState {...}
当我提交两个类似的SampleState时,数据库中会有两个不同的状态和两个不同的linearId。因此,有人可以告诉我如何确保数据库中的SampleState对象的“id”是唯一的吗?我在Flows和Contracts中使用了相同的代码来捕获这种情况。
val results = builder {
val quantityIndex = SampleSchemaV1.PersistentSample::id.equal(id);
val customCriteria1 = QueryCriteria.VaultCustomQueryCriteria(quantityIndex)
val criteria = generalCriteria.and(customCriteria1);
serviceHub.vaultService.queryBy<SampleState>(criteria)
}
if(results.states.count() > 0)
throw IllegalArgumentException("id $id is exist")
然而,即使在1秒内(提交事务1后1秒钟),也无法处理两个几乎相似的提交状态事务(commit Sample State Transaction)。