Spring Data - Customer @Query,没有属性匹配

时间:2013-03-28 12:13:56

标签: hibernate spring-mvc spring-data spring-data-jpa

我正在尝试设置一个不会自动生成的自定义@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&amp;的新手。数据

感谢任何人的帮助!

1 个答案:

答案 0 :(得分: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 = startDate,?2 = endDate。

参考:Spring Docs