首页 > 解决方案 > 带有 spEl 注释的“无法解析对 BeanFactory 的 bean 引用”

问题描述

我正在尝试为接下来的 7 天进行编程。在我使用 mysql 数据库在查询中使用 dateadd 之前,它不工作,

所以我尝试使用 spEl 注释来使用它,但是我有这个错误:

'无法解析对 BeanFactory 的 bean 引用'

您是否有解决此问题的方法或具有相同结果的替代方法?

public interface ProgrammationRepository extends JpaRepository<Programmation, Long> {
    @Query("select programmation from Programmation programmation left join fetch programmation.film where programmation.dateprogrammation >= ?#{@ProgrammationRepository.addSixDay()} and programmation.dateprogrammation <= ?#{@ProgrammationRepository.addSevenDay()}")
    List<Programmation> getSevenNextDay();

    @Query("select programmation from Programmation programmation left join fetch programmation.film where programmation.film.id = :id")
    List<Programmation> getFindByFilm(@Param("id") Long id);

    default Instant addSixDay() {
        System.out.println( Instant.now().plus(6, ChronoUnit.DAYS));
        return Instant.now().minus(6, ChronoUnit.DAYS);
    }

    default Instant addSevenDay() {
        return Instant.now().plus(7, ChronoUnit.DAYS);
    }

问候

标签: mysqlspringspring-boot

解决方案


#{@ProgrammationRepository.addSevenDay()}

上面的 SpEL 意味着它将找到一个名为 ProgrammationRepository 的 bean 并调用它的addSevenDay()方法。

但是,ProgrammationRepositorybean 的名称是p rogrammationRepository 而不是P rogrammationRepository(spring bean 的默认名称是类名的 lowerCamelCase)。将 SpEL 更改为以下应该可以解决问题:

#{@programmationRepository.addSevenDay()}

或者,您可以通过以下方式将ProgrammationRepositorybean 的名称更改为 ProgrammationRepository:

@Repository(value = "ProgrammationRepository")
public interface ProgrammationRepository extends JpaRepository<Programmation, Long> {

}

推荐阅读