Corda 通过合并两个模式列值并进行比较来编写自定义查询?

Corda 通过合并两个模式列值并进行比较来编写自定义查询?,corda,Corda,我们有名称模式包含 名字:罗克 姓:约翰 前缀:Mr 中间名:“ 后缀:“Jr” 我们正在创建一些状态,模式和定义 但是现在我们要用值来表示状态。我们需要像这样过滤这些值 (名字+姓氏)。等于(“RockJohn”)。 我们正在尝试编写自定义vault查询 有什么方法可以做到这一点吗?在Java中,您可以编写如下内容: FieldInfo firstNameField = getField("firstName", NameSchemaV1.PersistentName.class); Fi

我们有名称模式包含

  • 名字:罗克
  • 姓:约翰
  • 前缀:Mr
  • 中间名:“
  • 后缀:“Jr”
我们正在创建一些状态,模式和定义

但是现在我们要用值来表示状态。我们需要像这样过滤这些值 (名字+姓氏)。等于(“RockJohn”)。

我们正在尝试编写自定义vault查询


有什么方法可以做到这一点吗?

在Java中,您可以编写如下内容:

FieldInfo firstNameField = getField("firstName", NameSchemaV1.PersistentName.class);
FieldInfo lastNameField = getField("lastName", NameSchemaV1.PersistentName.class);

CriteriaExpression firstNameIndex = Builder.equal(firstNameField, "Rock");
CriteriaExpression lastNameIndex = Builder.equal(lastNameField, "John");

QueryCriteria firstNameCriteria = new QueryCriteria.VaultCustomQueryCriteria(firstNameIndex);
QueryCriteria lastNameCriteria = new QueryCriteria.VaultCustomQueryCriteria(lastNameIndex);

QueryCriteria criteria = firstNameCriteria.and(lastNameCriteria);
Vault.Page<ContractState> results = getServiceHub().getVaultService().queryBy(NameState.class, criteria);
val results = builder {
    val firstNameIndex = NameSchemaV1.PersistentName::firstName.equal("Rock")
    val lastNameIndex = NameSchemaV1.PersistentName::lastName.equal("John")

    val firstNameCriteria = QueryCriteria.VaultCustomQueryCriteria(firstNameIndex)
    val lastNameCriteria = QueryCriteria.VaultCustomQueryCriteria(lastNameIndex)

    val criteria = firstNameCriteria.and(lastNameCriteria)
    serviceHub.vaultService.queryBy(NameState::class.java, criteria)
}
可以使用创建动态/计算特性:

@Formula(value = " concat(first_name, last_name) ")
String fullName

然后在查询中将其视为常规属性/字段

谢谢@Joel。但我们将收到全名作为“RockJohn”这样的论点。我们需要通过组合这两个值进行筛选,并与“RockJohn”进行比较,然后在模式中添加一个
FullName
字段如何?谢谢,@Joel。但这与我们的数据模型背道而驰,所以我们需要这种格式的搜索。我不相信这种查询目前是可能的,不,谢谢。我建议你推荐。