我想知道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类型的机制可以消除麻烦的用户代码转换会更好。
答案 0 :(得分:1)
通过Spring Data测试:
get_thing(t:Thing)
例如是的,您可以列出多个字段并获取这些字段的列表(元组)列表。