Вы должны реализовать схему для своего состояния, как в этом примере:
class CashState(
val owner: AbstractParty,
val pennies: Long) : ContractState, QueryableState {
override val participants get() = listOf(owner)
override fun generateMappedObject(schema: MappedSchema): PersistentState {
return when (schema) {
is CashSchemaV1 -> CashSchemaV1.PersistentCashState(
this.owner,
this.pennies
)
else -> throw IllegalArgumentException("Unrecognised schema $schema")
}
}
override fun supportedSchemas(): Iterable<MappedSchema> = listOf(CashSchemaV1)
}
Сама схема:
object CashSchema
@CordaSerializable
object CashSchemaV1 : MappedSchema(schemaFamily = CashSchema.javaClass, version = 1, mappedTypes = listOf(PersistentCashState::class.java)) {
@Entity
@Table(name = "contract_cash_states")
class PersistentCashState(
@Column(name = "owner_name", unique=true, nullable = true)
var owner: AbstractParty?,
@Column(name = "pennies", nullable = false)
var pennies: Long
) : PersistentState()
}
Ключевой момент заключается в том, чтобы сделать столбцы уникальными, поэтому, когда выдобавить дублирующее значение, исключение выдается.
документы