PersistentAsset
样本定义:
/**
* The family of schemas for [Asset].
*/
object AssetSchema
/**
* An [Asset] schema.
*/
object AssetSchemaV1 : MappedSchema(
schemaFamily = AssetSchema.javaClass,
version = 1,
mappedTypes = listOf(PersistentAsset::class.java)) {
@Entity
@Table(name = "asset_states", indexes = arrayOf(Index(name = "asset_linear_id_idx", columnList = "linear_id"),
Index(name = "asset_owner_idx", columnList = "asset_owner")))
class PersistentAsset(
@Column(name = "cusip")
var cusip: String,
@Column(name = "asset_owner")
var owner: String,
@Column(name = "trade_id")
var tradeId: String,
@Column(name = "collateral_status")
var status: String
) : PersistentState() {
constructor() : this("", "", "", "")
}
}
但是当我在FlowLogic中运行以下查询时:
val session = DatabaseTransactionManager.current().session
val criteriaBuilder = session.criteriaBuilder
val criteriaQuery = criteriaBuilder.createQuery(Array<Any>::class.java)
val fromAsset = criteriaQuery.from(PersistentAsset::class.java)
criteriaQuery.select(criteriaBuilder.array(fromAsset.get<String>(PersistentAsset::cusip.name)))
val cusips = session.createQuery(criteriaQuery).resultList
它抛出: java.lang.IllegalArgumentException:不是实体:class com.example.schema.AssetSchemaV1 $ PersistentAsset
在PersistentAsset
@Entity
架构类之后,不知道为什么我收到此错误
答案 0 :(得分:1)
流不会公开Hibernate会话,因此没有内置的JPQL支持。您可以使用ServiceHub.jdbcSession
来查询流中的节点数据库。
以下是一个例子:
val results = serviceHub.jdbcSession().prepareStatement(
"select * from ASSET_STATES"
).executeQuery()
while (results.next()) {
val cussip = results.getString("cussip")
val assetOwner = results.getString("asset_owner")
val tradeId = results.getString("trade_id")
val collateralStatus = results.getString("collateral_status")
}
请注意,从Corda V2开始,在可能长时间运行的数据库操作期间,流量不会被检查点。