Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在实体列表中搜索关键字?_Java_Spring_Spring Boot_Spring Data Jpa_Spring Data - Fatal编程技术网

Java 如何在实体列表中搜索关键字?

Java 如何在实体列表中搜索关键字?,java,spring,spring-boot,spring-data-jpa,spring-data,Java,Spring,Spring Boot,Spring Data Jpa,Spring Data,我的实体具有类型为List的属性。我想用找到的关键字参数进行搜索。如果参数关键字在实体的关键字列表中,我想返回该实体。我该怎么做 我的实体类: @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "product") public class Product implements Serializable { @Id @GeneratedValue(strategy = Ge

我的实体具有类型为List的属性。我想用找到的关键字参数进行搜索。如果参数关键字在实体的关键字列表中,我想返回该实体。我该怎么做

我的实体类:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "product") 
public class Product implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name="title")
    private String title;

    @Column(name="price")
    private Float price;

    @Convert(converter = StringListConverter.class)
    private List<String> image;

    @ElementCollection(targetClass = String.class)
    @Column(name="keywords")
    private List<String> keywords; 
}
编辑

ProductController.java:

@RestController
@RequestMapping("/products")
public class ProductController {

    private final ProductService productService;

    public ProductController(ProductService productService){
        this.productService = productService;
    }

    @GetMapping("/voice")
    public
    ResponseEntity<?>
    getProductWithVoice(@RequestParam String keyword){
        Product p = productService.getProductWithVoiceKeyword(keyword);
        if (p != null && !p.isEmpty()) {
            return new ResponseEntity<>(new Response<>(true, 1, p), HttpStatus.OK);
        } else {
            return new ResponseEntity<>(new Response<>(false, 0, null), HttpStatus.NOT_FOUND);
        }
    }
}

那么,你想找到一个单一的产品,包含关键字?但是findByKeywordsContaining可能会找到几种产品。所以返回类型应该是List

如果您想返回Optional,那么应该调用类似findFirstByKeywordsContaining的方法

Hibernate提出了一个查询

选择 作为id1\u 1\u的产品0\u.id, 产品0的价格等于价格2的价格, 产品0。标题为标题3\u 1_ 从…起 产品产品0_ 哪里 ? 在里面 选择 关键词1.关键词 从…起 产品关键词1_ 哪里 product0.id=关键字1.product\u id ; 查询是确定的,如果替换?对于关键字,它给出了正确的结果。但Spring将其替换为%keyword%,并用百分号包围,它当然不起作用

还有另一种方法可以满足你的需求

公共接口ProductRepository扩展了JpaRepository{ 列出已查找的关键字列表关键字; } 这形成了一个sql查询,它实际上会得到结果,即使您必须提供关键字列表,而不是单个关键字

Hibernate为此生成另一个查询

选择 作为id1\u 1\u的产品0\u.id, 产品0的价格等于价格2的价格, 产品0。标题为标题3\u 1_ 从…起 产品产品0_ 左外联接乘积_关键字1_ 关于product0.id=关键字1.product\u id 哪里 关键字1。中的关键字 Spring将数组传递给?参数,所以一切正常


据我所知,这两个查询大致相当,因为RDBMS引擎应该将它们优化为相同的执行计划。但这取决于RMBMS的实现和索引。

返回关键字。containskeyword?关键字:null该操作有效吗?返回null?这应该是不可能的,他们应该返回一个空的可选项。是的,它返回一个空的可选项,但是我怎样才能得到一个产品?例如,我想得到根据电话关键字。我产品的一个leywords列表包含电话字符串项。所以我想得到这个。你能帮我一下吗@MDeinum@procrastinator我想使用SpringDataJPA存储库进行搜索。在您的情况下,首先我必须从DB获得所有产品,对吗?我认为这种方式不是一种有效的方式,我认为应该有一种更优化的方式。我还必须返回关键字的产品。而不是关键字本身。任何帮助我都将不胜感激。非常感谢你的回答和时间。而且,你是绝对正确的。但它仍然没有返回任何内容。列表仍然是空的你的桌子结构是什么?您有产品表来存储产品,还有一个单独的表来存储关键字?不,我没有单独的表来存储关键字。我只有Product表。默认情况下,Hibernate使用单独的表来存储ElementCollection。你做了什么来覆盖默认值?您确定吗,Hibernate不会在您不知道的情况下创建此表?很抱歉,我无法理解您的第一个问题,但现在我明白了。是的,Hibernate创建了表,我将结构图像添加到了下面的问题中。您可以在此图像中看到我的DB结构。请检查我的问题。
2021-05-27T04:20:19.190757+00:00 app[web.1]: 2021-05-27 04:20:19.190  WARN 4 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productController' defined in URL [jar:file:/app/target/shopping-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/controller/ProductController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productServiceImpl' defined in URL [jar:file:/app/target/shopping-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/service/impl/ProductServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productRepository' defined in com.repository.ProductRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.repository.ProductRepository.findByKeywordsContaining(java.lang.String)! unknown collection expression type [org.hibernate.query.criteria.internal.path.SingularAttributePath]
2021-05-27T04:20:19.191240+00:00 app[web.1]: 2021-05-27 04:20:19.191  INFO 4 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2021-05-27T04:20:19.192738+00:00 app[web.1]: 2021-05-27 04:20:19.192  INFO 4 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2021-05-27T04:20:19.211564+00:00 app[web.1]: 2021-05-27 04:20:19.211  INFO 4 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2021-05-27T04:20:19.212886+00:00 app[web.1]: 2021-05-27 04:20:19.212  INFO 4 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2021-05-27T04:20:19.225628+00:00 app[web.1]: 2021-05-27 04:20:19.225  INFO 4 --- [           main] ConditionEvaluationReportLoggingListener :
2021-05-27T04:20:19.225630+00:00 app[web.1]:
2021-05-27T04:20:19.225631+00:00 app[web.1]: Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-05-27T04:20:19.247757+00:00 app[web.1]: 2021-05-27 04:20:19.247 ERROR 4 --- [           main] o.s.boot.SpringApplication               : Application run failed
2021-05-27T04:20:19.247758+00:00 app[web.1]:
2021-05-27T04:20:19.247760+00:00 app[web.1]: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productController' defined in URL [jar:file:/app/target/shopping-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/controller/ProductController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productServiceImpl' defined in URL [jar:file:/app/target/shopping-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/service/impl/ProductServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productRepository' defined in com.repository.ProductRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.repository.ProductRepository.findByKeywordsContaining(java.lang.String)! unknown collection expression type [org.hibernate.query.criteria.internal.path.SingularAttributePath]
2021-05-27T04:20:19.247761+00:00 app[web.1]: at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247761+00:00 app[web.1]: at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247762+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247762+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247763+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247763+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247764+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247764+00:00 app[web.1]: at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247765+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247765+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247765+00:00 app[web.1]: at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247766+00:00 app[web.1]: at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247766+00:00 app[web.1]: at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247766+00:00 app[web.1]: at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.4.jar!/:2.4.4]
2021-05-27T04:20:19.247767+00:00 app[web.1]: at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:769) [spring-boot-2.4.4.jar!/:2.4.4]
2021-05-27T04:20:19.247767+00:00 app[web.1]: at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761) [spring-boot-2.4.4.jar!/:2.4.4]
2021-05-27T04:20:19.247785+00:00 app[web.1]: at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) [spring-boot-2.4.4.jar!/:2.4.4]
2021-05-27T04:20:19.247785+00:00 app[web.1]: at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) [spring-boot-2.4.4.jar!/:2.4.4]
2021-05-27T04:20:19.247786+00:00 app[web.1]: at org.springframework.boot.SpringApplication.run(SpringApplication.java:1313) [spring-boot-2.4.4.jar!/:2.4.4]
2021-05-27T04:20:19.247786+00:00 app[web.1]: at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) [spring-boot-2.4.4.jar!/:2.4.4]
2021-05-27T04:20:19.247786+00:00 app[web.1]: at com.Application.main(ShoppingApplication.java:12) [classes!/:0.0.1-SNAPSHOT]
2021-05-27T04:20:19.247787+00:00 app[web.1]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.]
2021-05-27T04:20:19.247787+00:00 app[web.1]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.]
2021-05-27T04:20:19.247787+00:00 app[web.1]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.]
2021-05-27T04:20:19.247788+00:00 app[web.1]: at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.]
2021-05-27T04:20:19.247789+00:00 app[web.1]: at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) [shopping-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
2021-05-27T04:20:19.247789+00:00 app[web.1]: at org.springframework.boot.loader.Launcher.launch(Launcher.java:107) [shopping-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
2021-05-27T04:20:19.247789+00:00 app[web.1]: at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) [shopping-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
2021-05-27T04:20:19.247789+00:00 app[web.1]: at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) [shopping-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
2021-05-27T04:20:19.247790+00:00 app[web.1]: Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productServiceImpl' defined in URL [jar:file:/app/target/shopping-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/service/impl/ProductServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productRepository' defined in com.repository.ProductRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.repository.ProductRepository.findByKeywordsContaining(java.lang.String)! unknown collection expression type [org.hibernate.query.criteria.internal.path.SingularAttributePath]
2021-05-27T04:20:19.247791+00:00 app[web.1]: at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247791+00:00 app[web.1]: at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247791+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247791+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247792+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247792+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247792+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247793+00:00 app[web.1]: at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247793+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247793+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247796+00:00 app[web.1]: at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247797+00:00 app[web.1]: at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247797+00:00 app[web.1]: at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247798+00:00 app[web.1]: at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247798+00:00 app[web.1]: at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247798+00:00 app[web.1]: ... 28 common frames omitted
2021-05-27T04:20:19.247800+00:00 app[web.1]: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productRepository' defined in com.repository.ProductRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.repository.ProductRepository.findByKeywordsContaining(java.lang.String)! unknown collection expression type [org.hibernate.query.criteria.internal.path.SingularAttributePath]
2021-05-27T04:20:19.247800+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247800+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247801+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247801+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247801+00:00 app[web.1]: at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247801+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247802+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247802+00:00 app[web.1]: at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247802+00:00 app[web.1]: at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247802+00:00 app[web.1]: at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247803+00:00 app[web.1]: at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247803+00:00 app[web.1]: at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247803+00:00 app[web.1]: ... 42 common frames omitted
2021-05-27T04:20:19.247804+00:00 app[web.1]: Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.repository.ProductRepository.findByKeywordsContaining(java.lang.String)! unknown collection expression type [org.hibernate.query.criteria.internal.path.SingularAttributePath]
2021-05-27T04:20:19.247805+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:96) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247805+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:107) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247808+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:218) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247808+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:81) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247808+00:00 app[web.1]: at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:100) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247809+00:00 app[web.1]: at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$mapMethodsToQuery$1(QueryExecutorMethodInterceptor.java:93) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247809+00:00 app[web.1]: at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.]
2021-05-27T04:20:19.247809+00:00 app[web.1]: at java.util.Iterator.forEachRemaining(Iterator.java:116) ~[na:1.8.]
2021-05-27T04:20:19.247810+00:00 app[web.1]: at java.util.Collections$UnmodifiableCollection$1.forEachRemaining(Collections.java:1051) ~[na:1.8.]
2021-05-27T04:20:19.247810+00:00 app[web.1]: at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) ~[na:1.8.]
2021-05-27T04:20:19.247811+00:00 app[web.1]: at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) ~[na:1.8.]
2021-05-27T04:20:19.247811+00:00 app[web.1]: at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[na:1.8.]
2021-05-27T04:20:19.247811+00:00 app[web.1]: at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.]
2021-05-27T04:20:19.247812+00:00 app[web.1]: at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.]
2021-05-27T04:20:19.247812+00:00 app[web.1]: at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566) ~[na:1.8.]
2021-05-27T04:20:19.247813+00:00 app[web.1]: at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.mapMethodsToQuery(QueryExecutorMethodInterceptor.java:95) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247813+00:00 app[web.1]: at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$new$0(QueryExecutorMethodInterceptor.java:85) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247814+00:00 app[web.1]: at java.util.Optional.map(Optional.java:215) ~[na:1.8.]
2021-05-27T04:20:19.247814+00:00 app[web.1]: at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.<init>(QueryExecutorMethodInterceptor.java:85) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247814+00:00 app[web.1]: at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:303) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247815+00:00 app[web.1]: at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:323) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247815+00:00 app[web.1]: at org.springframework.data.util.Lazy.getNullable(Lazy.java:230) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247815+00:00 app[web.1]: at org.springframework.data.util.Lazy.get(Lazy.java:114) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247816+00:00 app[web.1]: at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:329) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247816+00:00 app[web.1]: at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:144) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247816+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247817+00:00 app[web.1]: at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.5.jar!/:5.3.5]
2021-05-27T04:20:19.247817+00:00 app[web.1]: ... 53 common frames omitted
2021-05-27T04:20:19.247817+00:00 app[web.1]: Caused by: java.lang.IllegalArgumentException: unknown collection expression type [org.hibernate.query.criteria.internal.path.SingularAttributePath]
2021-05-27T04:20:19.247817+00:00 app[web.1]: at org.hibernate.query.criteria.internal.CriteriaBuilderImpl.isMember(CriteriaBuilderImpl.java:1343) ~[hibernate-core-5.3.10.Final.jar!/:5.3.10.Final]
2021-05-27T04:20:19.247817+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryCreator$PredicateBuilder.isMember(JpaQueryCreator.java:331) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247820+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryCreator$PredicateBuilder.build(JpaQueryCreator.java:290) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247820+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryCreator.toPredicate(JpaQueryCreator.java:211) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247820+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:124) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247821+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:59) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247821+00:00 app[web.1]: at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:119) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247821+00:00 app[web.1]: at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:95) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247821+00:00 app[web.1]: at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:81) ~[spring-data-commons-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247822+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.<init>(PartTreeJpaQuery.java:217) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247822+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$CountQueryPreparer.<init>(PartTreeJpaQuery.java:348) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247822+00:00 app[web.1]: at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:91) ~[spring-data-jpa-2.4.6.jar!/:2.4.6]
2021-05-27T04:20:19.247822+00:00 app[web.1]: ... 79 common frames omitted
2021-05-27T04:20:19.247823+00:00 app[web.1]:
2021-05-27T04:20:19.682591+00:00 [web.1]: Process exited with status 1
2021-05-27T04:20:19.768332+00:00 [web.1]: State changed from starting to crashed
@RestController
@RequestMapping("/products")
public class ProductController {

    private final ProductService productService;

    public ProductController(ProductService productService){
        this.productService = productService;
    }

    @GetMapping("/voice")
    public
    ResponseEntity<?>
    getProductWithVoice(@RequestParam String keyword){
        Product p = productService.getProductWithVoiceKeyword(keyword);
        if (p != null && !p.isEmpty()) {
            return new ResponseEntity<>(new Response<>(true, 1, p), HttpStatus.OK);
        } else {
            return new ResponseEntity<>(new Response<>(false, 0, null), HttpStatus.NOT_FOUND);
        }
    }
}