【发布时间】: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