[REDIS] java.lang.IllegalArgumentException가 :에 의한 (1)을 함유하는 [IsContaining는 포함 함유] 레디 스 질의 도출을 지원하지 않는 경우 - 레디 스
REDISjava.lang.IllegalArgumentException가 :에 의한 (1)을 함유하는 [IsContaining는 포함 함유] 레디 스 질의 도출을 지원하지 않는 경우 - 레디 스
나는 봄 부팅 + 레디 스 예를 개발하고 있어요. 이 예제에서는 RoleName에 따라 세부 사항을 당겨 일부 사용자 지정 방법을 개발했습니다. 방법은 아래 userRepository.findByRole_RoleName ( "ADMIN") 또는 userRepository.findByMiddleNameContaining ( "리")의 경우 ;, 우리는 예외 아래를 받고 있습니다.
참조 URL : https://docs.spring.io/spring-data/keyvalue/docs/1.2.15.RELEASE/reference/html/
사람이 공급자 포인터를 주시겠습니까? 다른 모든 방법이 잘 작동하고 있습니다. 그러나 단지이 방법은 문제를 일으키는. 내가 참조를 위해 필요한 모든 코드를 아래에 게시 할 예정입니다.
오류:
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:776)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at com.baeldung.MainAppDemo.main(MainAppDemo.java:21)
Caused by: java.lang.IllegalArgumentException: CONTAINING (1): [IsContaining, Containing, Contains]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.$Proxy65.findByMiddleNameContains(Unknown Source)
at com.baeldung.MainAppDemo.run(MainAppDemo.java:38)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:792)
... 5 common frames omitted
2018-11-04 00:27:29,639 INFO [main] org.springframework.context.support.AbstractApplicationContext: Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6f96c77: startup date [Sun Nov 04 00:27:26 IST 2018]; root of context hierarchy
2018-11-04 00:27:29,645 INFO [main] org.springframework.jmx.export.MBeanExporter: Unregistering JMX-exposed beans on shutdown
User.java
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@RedisHash("user")
public class User {
private @Id String id;
private @Indexed String firstName;
private @Indexed String middleName;
private @Indexed String lastName;
private Role role;
}
Role.java
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@RedisHash("Role")
public class Role {
private @Id String id;
private @Indexed String roleName;
}
UserRepository.java
public interface UserRepository extends CrudRepository<User, String>{
List<User> findByFirstNameAndLastName(String firstName, String lastName);
List<User> findByMiddleNameContains(String firstName);
List<User> findByRole_RoleName(String roleName);
}
MainAppDemo.java
@SpringBootApplication
public class MainAppDemo implements CommandLineRunner{
@Autowired
private UserRepository userRepository;
public static void main(String[] args) {
SpringApplication.run(MainAppDemo.class, args);
}
@Override
public void run(String... args) throws Exception {
Role role1 = Role.builder().id("R1").roleName("ADMIN").build();
User user1 = User.builder().firstName("Matt").middleName("Mike").lastName("Wixson").role(role1).build();
Role role2 = Role.builder().id("R2").roleName("API").build();
User user2 = User.builder().firstName("John").middleName("Lima").lastName("Kerr").role(role2).build();
userRepository.save(user1);
userRepository.save(user2);
List<User> u = userRepository.findByFirstNameAndLastName("Matt", "Wixson");
System.out.println("Find By First Name and Last Name = "+u.toString());
List<User> u2 = userRepository.findByMiddleNameContains("Li");
System.out.println("Contains ="+u2);
List<User> adminUser = userRepository.findByRole_RoleName("ADMIN");
System.out.println("ADMIN USER ="+adminUser);
}
}
JIRA 결함 : https://jira.spring.io/browse/DATAREDIS-887
최신 정보:
난 아직도 같은 오류가 발생하고, main 메소드에서이 및 호출과 같은 쿼리를 개발했다. 솔루션을 작업 제안하십시오.
@Query("SELECT u FROM User u WHERE u.middleName LIKE :middleName ")
List<User> findByMiddleNameContaining(@Param("middleName") String middleName);
해결법
-
==============================
1.확인은 "어떻게 레디 스 워크"에서 시작할 수 있습니다
확인은 "어떻게 레디 스 워크"에서 시작할 수 있습니다
기록의 빠른 위치에 도움이 ID에 대한 해시에 레디 스 작동합니다. @Indexed 또한 해시 빠르게 핀 포인팅 레코드를 저장한다
그래서 가운데 이름에 대한 기본적으로 쿼리는 "테스트"문자열의 해시 등의 작업은 문자열 "testuser에"에 대한 해시에 포함되지 않을 것 "포함".
그러나 ExampleMatcher은 구조에 여기에있다.
출처 : https://docs.spring.io/spring-data/redis/docs/2.1.2.RELEASE/reference/html/#query-by-example
역할 개체에 RoleName 검색을위한 솔루션은 비교적 간단하다 : 사용이 쿼리
userRepository.findByRoleRoleName ( "ADMIN") (기본적으로 밑줄을 삭제)
그리고 좋은 소식은 그것이 위의 ExampleMatcher와 결합 될 수 있다는 것입니다.
당신은 의심의 여지가있는 경우의 논의하자.
유용한 역할 이름 검색 참조 : 쿼리 중첩 봄 데이터를 사용하여 레디 스에서 개체
-
==============================
2.봄 부트 레디 스에서 당신은 당신이 표 9에 좀 걸릴 수 있습니다, 그리고 결합 같음처럼 지원 찾기위한 몇 가지 쿼리를 가지고, 또는 :
봄 부트 레디 스에서 당신은 당신이 표 9에 좀 걸릴 수 있습니다, 그리고 결합 같음처럼 지원 찾기위한 몇 가지 쿼리를 가지고, 또는 :
https://docs.spring.io/spring-data/redis/docs/current/reference/html/#redis.repositories.queries
업데이트]
당신은 참고로이 설명서 링크로 쿼리를 만들 수 있습니다
https://docs.spring.io/spring-data/redis/docs/2.1.2.RELEASE/reference/html/#query-by-example
from https://stackoverflow.com/questions/53134556/caused-by-java-lang-illegalargumentexception-containing-1-iscontaining-co by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 태그 캐시와 같은 뭔가 및 레디 스를 사용하여 제안을 위해 그것을 쿼리 (0) | 2020.01.08 |
---|---|
[REDIS] 어떻게 레디 스에서 집계 된 카탈로그 트리 검색 결과를 저장 (0) | 2020.01.08 |
[REDIS] 나는 각 연결에 대한 새로운 레디 스 클라이언트를 생성해야 하는가? (0) | 2020.01.08 |
[REDIS] 레디 스는 단일 스레드입니다. 그럼 왜 상추를 사용해야합니까? (0) | 2020.01.08 |
[REDIS] 푸른 레디 스 캐시 - 여러 오류 TimeoutException : 제한 시간이 GET을 수행 {키} (0) | 2020.01.08 |