【问题标题】:Does Ignite Spring Data @Query annotation support concept of projections to retrieve a subset of fields instead of entire object?Ignite Spring Data @Query 注释是否支持投影概念以检索字段子集而不是整个对象?
【发布时间】:2019-04-26 10:24:23
【问题描述】:

我想知道 Apache Ignite Spring Data 实现是否支持projections 的概念,以便仅检索缓存实体的字段/属性的子集,而不是获取可能有很多列的整个实体。

在文档中,我看到了一个示例,其中仅获取了缓存实体的一个属性,如下所示。

 /**
 * Getting ids of all the Person satisfying the custom query from {@link Query} annotation.
 *
 * @param orgId Query parameter.
 * @param pageable Pageable interface.
 * @return A list of Persons' ids.
 */
@Query("SELECT id FROM Person WHERE orgId > ?")
public List<Long> selectId(long orgId, Pageable pageable);

以上面的例子为例,如果一个人需要“Person”实体的“id”和“firstName”、“lastName”而不是上面的“id”,该怎么做?

谢谢

更新(从@alamar 发布答案): 谢谢@alamar!我还从 Spring Data Test 代码中复制了方法声明及其使用代码,因此其他人很容易理解答案。

/** */
@Query("SELECT _key, secondName FROM Person WHERE firstName REGEXP ?")
public List<List> selectSeveralField(String val, Pageable pageable);

/** */
public void testSelectSeveralFields() {
    List<List> lists = repo.selectSeveralField("^[a-z]+$", new PageRequest(2, 6));

    assertEquals(6, lists.size());

    for (List list : lists) {
        assertEquals(2, list.size());

        assertTrue(list.get(0) instanceof Integer);
    }
}

但是,如果有 Spring Data Projections 类型的机制来消除用户代码中的麻烦转换会更好。

【问题讨论】:

  • 感谢@alamar,我们知道了一种方法,我正在从 Spring Data 测试中复制下面的代码,该代码显示了其他人的用法` public void testSelectSeveralFields() { List lists = repo. selectSeveralField("^[a-z]+$", new PageRequest(2, 6)); assertEquals(6, list.size()); for (List list : lists) { assertEquals(2, list.size()); assertTrue(list.get(0) instanceof Integer); } } ` 然而,Spring Data Projections 类型的机制消除了用户代码中的麻烦转换会更好。

标签: spring-data ignite gridgain


【解决方案1】:

来自 Spring Data 测试:

@Query("SELECT _key, secondName FROM Person WHERE firstName REGEXP ?")
public List<List> selectSeveralField(String val, Pageable pageable);

例如是的,您可以列出多个字段并获取这些字段的列表(元组)列表。

【讨论】:

  • 谢谢@alamar!我理解在这种方法中它会返回一个通用列表类型,然后用户代码可以在从内部列表获取后转换为目标类型。很好,但是您知道这里是否支持 Spring Data 中更简洁的 Projections 机制吗?
  • 我不确定,你能试试吗?如果没有,您可以提交 JIRA 票证吗?
  • 当然@alamar,我会尝试并让您知道...如果没有,也会提交票证。
猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
相关资源
最近更新 更多