1

我正在尝试设置一个不会自动生成的自定义@Query,但无论我尝试什么,它都会尝试将方法名称中的属性与返回对象中的属性相匹配。

如何在不尝试构建查询的情况下运行此查询,并因 org.springframework.data.mapping.PropertyReferenceException 而失败?也许@Query 是错误的注释?

我的回购目前看起来像这样:

@Repository
public interface ScheduleRepository extends CrudRepository<Schedule, Integer>
{
    @Query
    List<Schedule> findByTypeAndAirDateBetweenOrderByAirDateDesc(String type, Date startDate, Date endDate);

    @Query("SELECT s FROM Schedule s WHERE s.type = 'A' AND (s.airDate BETWEEN :startDate AND :endDate) ORDER BY ABS(DATEDIFF(s.airDate, NOW())) LIMIT 1")
    List<Schedule> findCurrentAd(Date startDate, Date endDate);
}

当它在我的 Schedule 类中找不到匹配的“当前”字段时,就会发生异常。我不希望它。我只希望它按照我定义的方式运行查询,不问任何问题。

正如您可能已经看出的那样,我是 Spring MVC & Data 的新手。

感谢任何人的帮助!

4

1 回答 1

0

如果您使用绑定参数,例如:VALUE,您应该使用@Param("value")来匹配您的@Query注释。尝试这个:

@Repository
public interface ScheduleRepository extends CrudRepository<Schedule, Integer>
{
    @Query
    List<Schedule> findByTypeAndAirDateBetweenOrderByAirDateDesc(String type, Date startDate, Date endDate);

    @Query("SELECT s FROM Schedule s WHERE s.type = 'A' AND (s.airDate BETWEEN :startDate AND :endDate) ORDER BY ABS(DATEDIFF(s.airDate, NOW())) LIMIT 1")
    List<Schedule> findCurrentAd(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
}

如果您选择使用没有 @Param 注释的构造函数,则可以使用?n如下绑定:

@Repository
public interface ScheduleRepository extends CrudRepository<Schedule, Integer>
{
    @Query
    List<Schedule> findByTypeAndAirDateBetweenOrderByAirDateDesc(String type, Date startDate, Date endDate);

    @Query("SELECT s FROM Schedule s WHERE s.type = 'A' AND (s.airDate BETWEEN ?1 AND ?2) ORDER BY ABS(DATEDIFF(s.airDate, NOW())) LIMIT 1")
    List<Schedule> findCurrentAd(Date startDate, Date endDate);
}

?n 绑定表示方法中的参数序列。?1 = 开始日期,?2 = 结束日期。

参考:Spring 文档

于 2013-03-28T16:15:25.250 回答