问题
Do we have a pattern for queryable persistent collections nested within a state?
class ALinearState(val items: List<Item>) : LinearState
data class Item(name: String, ...)
For a given ALinearState
, alpha
we wish to store versions for the same UniqueIdentifier
. Each version will have a discrete set of items
. We want to be able to query a table for items
that match a filter, then recover the set states of alpha
that match the filtered items
.
Is there a way of achieving this? Thanks.
回答1:
You can represent you Contract States using any form of JPA/Hibernate model definition. For example:
object TestSchema : MappedSchema(SchemaFamily::class.java, 1, setOf(Parent::class.java, Child::class.java)) {
@Entity
@Table(name = "Parents")
class Parent : PersistentState() {
@OneToMany(fetch = FetchType.LAZY)
@JoinColumns(JoinColumn(name = "transaction_id", referencedColumnName = "transaction_id"), JoinColumn(name = "output_index", referencedColumnName = "output_index"))
@OrderColumn
@Cascade(CascadeType.PERSIST)
var children: MutableSet<Child> = mutableSetOf()
}
@Entity
@Table(name = "Children")
class Child {
@Id
@GeneratedValue
@Column(name = "child_id", unique = true, nullable = false)
var childId: Int? = null
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(JoinColumn(name = "transaction_id", referencedColumnName = "transaction_id"), JoinColumn(name = "output_index", referencedColumnName = "output_index"))
var parent: Parent? = null
}
}
In terms of subsequent query, it would probably be best to use a JDBC query to execute any custom queries you may have (using standard JDBC or Hibernate).
来源:https://stackoverflow.com/questions/48930564/querying-nested-collections-in-linearstate-states