java.lang.IllegalArgumentException: IN (1): [IsIn, In] не поддерживается для получения запроса redis - Redis - PullRequest
0 голосов
/ 12 ноября 2018

Похоже, Spring Data Redis пока не поддерживает запросы IsIn, In. Я не уверен, есть ли какой-либо другой способ сделать это в качестве самых простых запросов. Это должно было быть или счастливым, используя Spring Data Redis или RestTemplate.

java.lang.IllegalArgumentException: IN (1): [IsIn, In]is not supported for redis query derivation
    at org.springframework.data.redis.repository.query.RedisQueryCreator.from(RedisQueryCreator.java:67)
    at org.springframework.data.redis.repository.query.RedisQueryCreator.create(RedisQueryCreator.java:53)
    at org.springframework.data.redis.repository.query.RedisQueryCreator.create(RedisQueryCreator.java:41)
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:119)
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:95)
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:81)
    at org.springframework.data.keyvalue.repository.query.KeyValuePartTreeQuery.createQuery(KeyValuePartTreeQuery.java:211)
    at org.springframework.data.keyvalue.repository.query.KeyValuePartTreeQuery.prepareQuery(KeyValuePartTreeQuery.java:148)
    at org.springframework.data.keyvalue.repository.query.KeyValuePartTreeQuery.execute(KeyValuePartTreeQuery.java:106)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:602)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:590)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy76.findByNameIn(Unknown Source)
    at com.mastercard.customer.program.UserGroupTest.test(UserGroupTest.java:58)

Group.java

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@RedisHash("groups")
public class Group {
    @Id
    private Long groupId;
    private String name;
}

User.java

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@RedisHash("users")
public class User {
    @Id
    private Long userId;
    private String name;
}

UserGroupTest.java

@Log4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserGroupTest extends RepositoryTestSupport{
    @Autowired UserRepository userRepository;
    @Autowired GroupRepository groupRepository;

    @Before
    public void setUp() {
        User user1 = User.builder().userId(1L).name("John").build();
        User user2 = User.builder().userId(2L).name("Sally").build();
        User user3 = User.builder().userId(3L).name("Chris").build();

        Group group1 = Group.builder().groupId(1L).name("Nature-Group").build();
        Group group2 = Group.builder().groupId(2L).name("Music-Group").build();
        Group group3 = Group.builder().groupId(3L).name("Sports-Group").build();

        userRepository.save(user1);
        userRepository.save(user2);
        userRepository.save(user3);

        groupRepository.save(group1);
        groupRepository.save(group2);
        groupRepository.save(group3);
    }

    @Test
    public void test() {
        List<User> users = userRepository.findByNameIn(Arrays.asList("John", "Sally"));
        System.out.println(users.size());
    }
}

1 Ответ

0 голосов
/ 12 ноября 2018

Spring Data Redis 2.1.2 (последняя версия на момент написания) не поддерживает In запросы через их вывод.Существует тикет для поддержки типа запроса In.

...