我正在使用Spring-boot进行webApp,我希望创建一个查询findByMonth(int或String month),但我希望能够使用例如findByNameAndMonth(String name,month)或findByIdAndMonth( ) 可能吗? 日期有LocalDate类型。
我有一个像这样的对象:
public final class Alarm {
@id
private final String id;
private final String type;
// ....
private final LocalDate date;
及其mongoRepository:
public interface AlarmRepository extends MongoRepository<Alarm, String>{
}
该查询应该提供与此查询相同的结果,例如:
db.alarm.find({ $where : 'return this.date.getMonth() == 5'})
答案 0 :(得分:0)
是的,有可能。 Spring Data期望存储库方法名称中的变量名称相同。例如:
public final class Alarm {
@id
private final String id;
private final String type;
....
private final LocalDate date;
然后在您的存储库中,方法名称应如下所示。
findByIdAndDate(String id, LocalDate date);
findByIdAndType(String id, String type);
答案 1 :(得分:0)
LocalDate
作为ISODate存储在MongoDB中,因此无法直接访问它的属性(date.month
无效并且必须使用方法getMonth()
)。
这导致使用Spring Data中的日期有点棘手。为解决您的问题,我建议您在存储库中创建此方法:
List<Alarm> findByDateBetween(LocalDate from, LocalDate to);
但是你必须处理边界条件(月初和月末)。
另一种选择是将日期存储为普通对象,并按照documentation中的描述在其属性中访问月份。