Java 使用Spring数据查找一年中的所有实体

Java 使用Spring数据查找一年中的所有实体,java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,我使用的是Spring数据,我有一个名为Event的实体,其中有一个字段eventDate,它是java.util.Date 我想查找一年中的所有事件,因此我首先尝试编写一个方法签名: List<Event> findAllByEventDateYear(String symbol, int year); 列出findAllByEventDateYear(字符串符号,整数年); 但当然不行,我的第二次尝试是在: List<Event> findAllByEventDa

我使用的是Spring数据,我有一个名为
Event
的实体,其中有一个字段
eventDate
,它是
java.util.Date

我想查找一年中的所有事件,因此我首先尝试编写一个方法签名:

List<Event> findAllByEventDateYear(String symbol, int year);
列出findAllByEventDateYear(字符串符号,整数年);
但当然不行,我的第二次尝试是在:

List<Event> findAllByEventDateBetween(Date dateStart, Date dateEnd);
列出FindAllByEventDateBeween(日期开始、日期结束);
为了使该方法更实用,我在服务中添加了以下内容:

private List<Event> findAllByEventDateYear(int year) {
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.DAY_OF_YEAR, 1);
    Date dateStart = cal.getTime();

    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, 11); // 11 = december
    cal.set(Calendar.DAY_OF_MONTH, 31);
    Date dateEnd = cal.getTime();

    List<Event> quotes = eventDao.findAllByEventDateBetween(dateStart, dateEnd);
    return events;
}
私人列表findallbyventdateyear(整数年){
Calendar cal=Calendar.getInstance();
校准设置(日历年、年份);
校准设置(日历日/年,1);
Date dateStart=cal.getTime();
校准设置(日历年、年份);
cal.set(Calendar.MONTH,11);//11=december
校准设置(日历日/月/日,31);
Date dateEnd=cal.getTime();
List quotes=eventDao.findallbyventdatebetween(dateStart,dateEnd);
返回事件;
}

有没有更好的方法用Spring数据来实现这一点?

如果有人在寻找解决方案的话

LocalDate instance = LocalDate.now().withYear(year);
LocalDate dateStart = instance.with(firstDayOfYear());
LocalDate dateEnd = instance.with(lastDayOfYear());
eventDao.findAllByEventDateBetween(dateStart, dateEnd);

我会坚持让回购协议提供两个值之间的日期查询,如果我想查询一年或任何其他此类预定义范围,我很乐意有一个服务方法,在将其传递给查询之前计算出范围的限制。至少这样,您的代码可以合理地跨时区移植。特别是如果您使用Joda或java8日期/时间类。也许可以使用LocalDate,这将修复由于忽略时间而导致的错误。