Я хочу создать State с уникальным идентификатором в базе данных.Это мой код состояния
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 в базе данных является уникальным?Я использовал один и тот же код для перехвата этого случая в потоках и контрактах, например
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")
. Однако он не работает с двумя транзакциями Sample State commit почти в одно и то же время, даже в 1 с (фиксация транзакции 1 и после1 секунда, совершить транзакцию 2)