java - Spring Boot Mongo Data org.springframework.data.mapping.context.InvalidPersistentPropertyPath
问题描述
我想用日期获取我的数据。
不要读这个
“是否可以使用 LocalDateTime 类查询数据?我真的没有什么要添加的,但 StackOverflow 告诉我我的问题是所有代码,所以我要添加这个。不过,Stackoverflow 告诉我我的问题主要是代码所以我只是在重复自己。我的问题是不言自明的,我真的不知道我还应该补充什么”
不要读这个
POJO:
@Getter
@Setter
@Document(collection = "matches")
public class Match {
@Id
private long id;
private String matchName;
private LocalDateTime date;
public static final String SEQUENCE_NAME = "matches";
}
存储库:
@Repository
public interface MatchRepository extends MongoRepository<Match,Long> {
Page<Match> findAllByDate_DayOfMonth(int date_dayOfYear, Pageable pageable);
}
服务:
@Override
public Page<Match> findTodayMatches(int count, int page) {
int mPage = page != 0 ? page - 1: 0;
Pageable pageable = PageRequest.of(mPage, count, Sort.by("date").ascending());
return matchRepository.findAllByDate_DayOfMonth(LocalDateTime.now().getDayOfMonth(),pageable);
}
错误:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.util.ReflectionUtils (file:/C:/Users/ME/.m2/repository/org/springframework/spring-core/5.3.1/spring-core-5.3.1.jar) to constructor java.time.LocalDateTime(java.time.LocalDate,java.time.LocalTime)
WARNING: Please consider reporting this to the maintainers of org.springframework.util.ReflectionUtils
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2020-12-04 17:48:29.284 ERROR 13300 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.mapping.context.InvalidPersistentPropertyPath: No property 'dayOfMonth' found on class java.time.LocalDateTime! Did you mean: ?] with root cause
org.springframework.data.mapping.context.InvalidPersistentPropertyPath: No property 'dayOfMonth' found on class java.time.LocalDateTime! Did you mean: ?
at org.springframework.data.mapping.context.PersistentPropertyPathFactory.createPersistentPropertyPath(PersistentPropertyPathFactory.java:205) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.mapping.context.PersistentPropertyPathFactory.lambda$getPersistentPropertyPath$1(PersistentPropertyPathFactory.java:172) ~[spring-data-commons-2.4.1.jar:2.4.1]
at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) ~[na:na]
at org.springframework.data.mapping.context.PersistentPropertyPathFactory.getPersistentPropertyPath(PersistentPropertyPathFactory.java:171) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.mapping.context.PersistentPropertyPathFactory.from(PersistentPropertyPathFactory.java:86) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.mapping.context.PersistentPropertyPathFactory.from(PersistentPropertyPathFactory.java:99) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:286) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:118) ~[spring-data-mongodb-3.1.1.jar:3.1.1]
at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:65) ~[spring-data-mongodb-3.1.1.jar:3.1.1]
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:119) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:95) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:81) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.mongodb.repository.query.PartTreeMongoQuery.createQuery(PartTreeMongoQuery.java:89) ~[spring-data-mongodb-3.1.1.jar:3.1.1]
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.doExecute(AbstractMongoQuery.java:122) ~[spring-data-mongodb-3.1.1.jar:3.1.1]
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:107) ~[spring-data-mongodb-3.1.1.jar:3.1.1]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:152) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.1.jar:5.3.1]
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.4.1.jar:2.4.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.1.jar:5.3.1]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.1.jar:5.3.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.1.jar:5.3.1]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.1.jar:5.3.1]
at com.sun.proxy.$Proxy95.findAllByDate_DayOfMonth(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.3.1.jar:5.3.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.3.1.jar:5.3.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.1.jar:5.3.1]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.1.jar:5.3.1]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.1.jar:5.3.1]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.1.jar:5.3.1]
at com.sun.proxy.$Proxy95.findAllByDate_DayOfMonth(Unknown Source) ~[na:na]
解决方案
您可以使用以下命令按日期查询集合。并且,存储库查询如下:
@Query("{ $expr: { $eq: [ { $dayOfMonth: '$date' }, ?0 ] } }")
List<Match> findAllByDayOfMonth(int dayOfMonth);
该代码repo.findAllByDayOfMonth(4)
返回数据库中具有date
字段值的所有文档,例如ISODate("2020-12-04T08:50:00Z")
和ISODate("2019-04-04T09:45:00Z")
。
另一种方法是实现存储库方法(在存储库实现类中)。但是,上述解决方案更简单、更清晰。
您得到的异常是org.springframework.data.mapping.context.InvalidPersistentPropertyPath
“异常表明源路径无法完全解析为 PersistentPropertyPath。”。 java.time.LocalDateTime
确实有getDayOfMonth()
方法。但是,我不知道您是否可以按照您想要的方式使用 JDK API 类方法。
我尝试过的代码是 Spring Boot v2.4 和 MongoDB v4.2.8。
推荐阅读
- matrix - Sumifs 在具有一个行条件和两个列条件的矩阵中
- angular - 模块解析失败:“导入”和“导出”可能只出现在顶层
- python - pandas:从日期开始计算一年内出现的次数,按主题分组
- sql - 查找每行给定时间之前的最后一个事件
- dart - 将 setState() 设置为仅刷新页面的最有效方法是什么
- python - 在 tf 数据集上映射 Keras 模型预测以保持顺序
- python - Python 3.7 字节码 MAKE_FUNCTION:如何解释这种反汇编的函数声明?
- eclipse - 如何在 Xubuntu VM 上使用 Eclipse 中的 EGit 从帐户推送到 Github 上的远程仓库?
- python - 傅里叶域中带核的卷积图像
- c# - 在asp.net Web API中,引用类型为null时ModelStates无效?