我正在尝试设置一个不会自动生成的自定义@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;的新手。数据
感谢任何人的帮助!
答案 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