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) [spring−data−commons−2.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) [spring−data−commons−2.2.12.RELEASE.jar:2.2.12.RELEASE]atorg.springframework.data.mapping.context.PersistentPropertyPathFactory.from(PersistentPropertyPathFactory.java:97) [spring−data−commons−2.2.12.RELEASE.jar:2.2.12.RELEASE]atorg.springframework.data.mapping.context.PersistentPropertyPathFactory.from(PersistentPropertyPathFactory.java:110) [spring−data−commons−2.2.12.RELEASE.jar:2.2.12.RELEASE]atorg.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:275) [spring−data−commons−2.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) [spring−data−mongodb−2.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”);
这样就会出错。