spingboot mongo使用,字段用下划线分割,且以hash结尾,查询会出错。

package com.hcll.sail.demo.mongo.entity;

import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.io.Serializable;

@Document(collection = Student.STUDENT)
@Data
public class Student implements Serializable {
    public static final String STUDENT = "student";
    public static final String ABC = "abc_hash";

    @Field(ABC)
    private String abc;
}

        Criteria c1 = new Criteria();
        c1.and(Student.ABC).is("query_xxxxxxx");
        Query q = new Query(c1);
        Student stu = mongoTemplate.findOne(q, Student.class);
        System.out.println(stu);

出现异常:
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787) ~[spring-boot-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768) ~[spring-boot-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) ~[spring-boot-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at com.hcll.sail.demo.mongo.DemoMongoApplication.main(DemoMongoApplication.java:21) ~[classes/:na]
Caused by: org.springframework.data.mapping.MappingException: Couldn’t find PersistentEntity for type java.lang.String!
at org.springframework.data.mapping.context.MappingContext.getRequiredPersistentEntity(MappingContext.java:119) ~[spring-data-commons-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.data.mapping.context.PersistentPropertyPathFactory.getPair(PersistentPropertyPathFactory.java:237) ~[spring-data-commons-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.data.mapping.context.PersistentPropertyPathFactory.createPersistentPropertyPath(PersistentPropertyPathFactory.java:210) ~[spring-data-commons-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.data.mapping.context.PersistentPropertyPathFactory.lambda$getPersistentPropertyPath 2 ( P e r s i s t e n t P r o p e r t y P a t h F a c t o r y . j a v a : 183 )   [ s p r i n g − d a t a − c o m m o n s − 2.2.12. R E L E A S E . j a r : 2.2.12. R E L E A S E ] a t j a v a . b a s e / j a v a . u t i l . c o n c u r r e n t . C o n c u r r e n t M a p . c o m p u t e I f A b s e n t ( C o n c u r r e n t M a p . j a v a : 330 )   [ n a : n a ] a t o r g . s p r i n g f r a m e w o r k . d a t a . m a p p i n g . c o n t e x t . P e r s i s t e n t P r o p e r t y P a t h F a c t o r y . g e t P e r s i s t e n t P r o p e r t y P a t h ( P e r s i s t e n t P r o p e r t y P a t h F a c t o r y . j a v a : 182 )   [ s p r i n g − d a t a − c o m m o n s − 2.2.12. R E L E A S E . j a r : 2.2.12. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . m a p p i n g . c o n t e x t . P e r s i s t e n t P r o p e r t y P a t h F a c t o r y . f r o m ( P e r s i s t e n t P r o p e r t y P a t h F a c t o r y . j a v a : 97 )   [ s p r i n g − d a t a − c o m m o n s − 2.2.12. R E L E A S E . j a r : 2.2.12. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . m a p p i n g . c o n t e x t . P e r s i s t e n t P r o p e r t y P a t h F a c t o r y . f r o m ( P e r s i s t e n t P r o p e r t y P a t h F a c t o r y . j a v a : 110 )   [ s p r i n g − d a t a − c o m m o n s − 2.2.12. R E L E A S E . j a r : 2.2.12. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . m a p p i n g . c o n t e x t . A b s t r a c t M a p p i n g C o n t e x t . g e t P e r s i s t e n t P r o p e r t y P a t h ( A b s t r a c t M a p p i n g C o n t e x t . j a v a : 275 )   [ s p r i n g − d a t a − c o m m o n s − 2.2.12. R E L E A S E . j a r : 2.2.12. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . m o n g o d b . c o r e . c o n v e r t . Q u e r y M a p p e r 2(PersistentPropertyPathFactory.java:183) ~[spring-data-commons-2.2.12.RELEASE.jar:2.2.12.RELEASE] at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) ~[na:na] at org.springframework.data.mapping.context.PersistentPropertyPathFactory.getPersistentPropertyPath(PersistentPropertyPathFactory.java:182) ~[spring-data-commons-2.2.12.RELEASE.jar:2.2.12.RELEASE] at org.springframework.data.mapping.context.PersistentPropertyPathFactory.from(PersistentPropertyPathFactory.java:97) ~[spring-data-commons-2.2.12.RELEASE.jar:2.2.12.RELEASE] at org.springframework.data.mapping.context.PersistentPropertyPathFactory.from(PersistentPropertyPathFactory.java:110) ~[spring-data-commons-2.2.12.RELEASE.jar:2.2.12.RELEASE] at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:275) ~[spring-data-commons-2.2.12.RELEASE.jar:2.2.12.RELEASE] at org.springframework.data.mongodb.core.convert.QueryMapper 2(PersistentPropertyPathFactory.java:183) [springdatacommons2.2.12.RELEASE.jar:2.2.12.RELEASE]atjava.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) [na:na]atorg.springframework.data.mapping.context.PersistentPropertyPathFactory.getPersistentPropertyPath(PersistentPropertyPathFactory.java:182) [springdatacommons2.2.12.RELEASE.jar:2.2.12.RELEASE]atorg.springframework.data.mapping.context.PersistentPropertyPathFactory.from(PersistentPropertyPathFactory.java:97) [springdatacommons2.2.12.RELEASE.jar:2.2.12.RELEASE]atorg.springframework.data.mapping.context.PersistentPropertyPathFactory.from(PersistentPropertyPathFactory.java:110) [springdatacommons2.2.12.RELEASE.jar:2.2.12.RELEASE]atorg.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:275) [springdatacommons2.2.12.RELEASE.jar:2.2.12.RELEASE]atorg.springframework.data.mongodb.core.convert.QueryMapperMetadataBackedField.getPath(QueryMapper.java:1100) ~[spring-data-mongodb-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.data.mongodb.core.convert.QueryMapper M e t a d a t a B a c k e d F i e l d . < i n i t > ( Q u e r y M a p p e r . j a v a : 968 )   [ s p r i n g − d a t a − m o n g o d b − 2.2.12. R E L E A S E . j a r : 2.2.12. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . m o n g o d b . c o r e . c o n v e r t . Q u e r y M a p p e r MetadataBackedField.<init>(QueryMapper.java:968) ~[spring-data-mongodb-2.2.12.RELEASE.jar:2.2.12.RELEASE] at org.springframework.data.mongodb.core.convert.QueryMapper MetadataBackedField.<init>(QueryMapper.java:968) [springdatamongodb2.2.12.RELEASE.jar:2.2.12.RELEASE]atorg.springframework.data.mongodb.core.convert.QueryMapperMetadataBackedField.(QueryMapper.java:945) ~[spring-data-mongodb-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.data.mongodb.core.convert.QueryMapper.createPropertyField(QueryMapper.java:263) ~[spring-data-mongodb-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:142) ~[spring-data-mongodb-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:2473) ~[spring-data-mongodb-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:820) ~[spring-data-mongodb-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:807) ~[spring-data-mongodb-2.2.12.RELEASE.jar:2.2.12.RELEASE]
at com.hcll.sail.demo.mongo.DemoMongoApplication.run(DemoMongoApplication.java:40) ~[classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784) ~[spring-boot-2.2.12.RELEASE.jar:2.2.12.RELEASE]
… 5 common frames omitted

2021-01-09 09:57:53.575 INFO 27680 — [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService ‘applicationTaskExecutor’

Process finished with exit code 1

出现问题的条件:
1.字段名用xxx_hash,即以_分隔,后面有hash字符。
因为:String.class.getDeclaredFields(); 中包含"hash"属性

2.查询时,用改字段查询
c1.and(“abc_hash”).is(“query_xxxxxxx”);

这样就会出错。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值