【发布时间】:2021-01-23 04:49:58
【问题描述】:
在 Corda 中,我们为可查询状态创建状态模式;例如:
object MyStateSchema {
object MyStateSchemaV1 : MappedSchema(
schemaFamily = MyStateSchema.javaClass,
version = 1,
mappedTypes = listOf(MyStateEntity::class.java)
)
@Entity
@Table(name = "my_states")
class MyStateEntity(
@Column(name = "linear_id", nullable = false)
val linearId: UUID = UUID.randomUUID(),
@Column(name = "external_id", nullable = true)
val externalId: String? = null,
@Column(name = "identity", nullable = false)
val identity: AbstractParty = NULL_PARTY,
@Column(name = "value", nullable = false)
val value: String = ""
) : PersistentState()
}
值得注意的是,MyStateEntity 使用 JPA 注释进行了注释。由此我们需要生成数据库无关脚本来创建和更新数据库模式;例如:
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
<changeSet author="Me" id="create-my_states">
<createTable tableName="my_states">
<column name="output_index" type="INT">
<constraints nullable="false"/>
</column>
<column name="transaction_id" type="NVARCHAR(64)">
<constraints nullable="false"/>
</column>
<column name="linear_id" type="uuid">
<constraints nullable="false"/>
</column>
<column name="external_id" type="NVARCHAR(255)" />
<column name="identity" type="NVARCHAR(255)">
<constraints nullable="false"/>
</column>
<column name="value" type="NVARCHAR(255)">
<constraints nullable="false"/>
</column>
</createTable>
<addPrimaryKey columnNames="output_index, transaction_id"
constraintName="PK_my_states"
tableName="my_states"/>
</changeSet>
</databaseChangeLog>
目前我正在手动编写更改日志,这很烦人。我相信一定有更好的方法。我尝试向 gradle 添加一些依赖项,以便我可以运行以下命令(遗憾的是它不起作用):
./gradlew generateChangeLog
liquibase 可以自动生成这些脚本吗?
【问题讨论】:
-
这有帮助吗?不过,我没有尝试过:stackoverflow.com/questions/35716378/…
标签: kotlin jpa gradle liquibase corda