我的应用程序在Repository中不包含任何自定义方法时运行良好。当我在repo接口中添加一个自定义repo方法时,它会给出异常,应用程序无法启动。
package com.library.repo;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.library.entity.ShowEntity;
@Repository
public interface ShowRepository extends JpaRepository<ShowEntity, Integer> {
@Query("SELECT s FROM show_entity s WHERE s.movie.movie_id = :movieId")
List<ShowEntity> findShowsByMovieId(int movieId);
}
控制台消息:
Error creating bean with name 'showController' defined in file [/Users/PR20372898/Documents/workspace-spring-tool-suite-4-4.15.1.RELEASE/XYZCinemas/target/classes/com/library/controller/ShowController.class]: Unsatisfied dependency expressed through constructor parameter 0:
Error creating bean with name 'showService' defined in file [/Users/PR20372898/Documents/workspace-spring-tool-suite-4-4.15.1.RELEASE/XYZCinemas/target/classes/com/library/service/ShowService.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'showRepository' defined in com.library.repo.ShowRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration:
Could not create query for public abstract java.util.List com.library.repo.ShowRepository.findShowsByMovieId(int); Reason: Validation failed for query for method public abstract java.util.List com.library.repo.ShowRepository.findShowsByMovieId(int)
出现此问题的可能原因是什么?我使用了所有的注解。请帮帮我
4条答案
按热度按时间wnrlj8wa1#
问题出在语法上,你写得不对。
正确的一个:
要了解更多详细信息,请阅读documentation
dvtswwa32#
看起来你的查询语法中可能有一个bug。如果您试图从
show_entity
表中选择所有列,语法应该是:wwtsj6pe3#
Spring Data JPA已经提供了对基于方法名称的派生查询的支持。在这种情况下可以直接使用,如下所示,通过电影ID检索记录。
但是如果您仍然希望使用
@Query
注解,则需要了解JPQL(Java持久化查询语言)和本机查询之间的区别。可以在JPQL中将查询重写为:使用本机查询时,查询应更新如下:
我建议您仔细阅读文档,以更深入地了解这个主题。
szqfcxe24#
从docs
第二种方式: