我创建了 2 个具有相同 ClassName 但位于不同包中且具有不同 NodeEntity 标签的类。仅当使用@Query调用存储库方法时,我才面临下面的 OGM 映射异常。
Caused by: org.neo4j.ogm.exception.core.MappingException: More than one class has simple name: Circuit
at org.neo4j.ogm.metadata.DomainInfo.getClassInfo(DomainInfo.java:307)
at org.neo4j.ogm.metadata.DomainInfo.getClassSimpleName(DomainInfo.java:289)
at org.neo4j.ogm.metadata.MetaData.classInfo(MetaData.java:78)
at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.lambda$executeAndMap$1(ExecuteQueriesDelegate.java:119)
at org.neo4j.ogm.session.Neo4jSession.doInTransaction(Neo4jSession.java:574)
at org.neo4j.ogm.session.Neo4jSession.doInTransaction(Neo4jSession.java:553)
at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.executeAndMap(ExecuteQueriesDelegate.java:118)
at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.query(ExecuteQueriesDelegate.java:88)
at org.neo4j.ogm.session.Neo4jSession.query(Neo4jSession.java:408)
在调试时,我发现org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate类中的executeAndMap方法使用 Class SimpleName而不是分配的标签来查找导致问题的 ClassInfo。
具有相同简单名称的类存在于不同的包中,具有不同的标签并映射到不同的存储库接口。Neo4jSession.loadAll按预期工作,因为它使用类完整限定名称来获取 ClassInfo。
private <T> Iterable<T> executeAndMap(Class<T> type, String cypher,
Map<String, ?> parameters, ResponseMapper mapper) {
return session.<Iterable<T>>doInTransaction( () -> {
if (type != null && session.metaData().classInfo(type.getSimpleName()) != null) {
预期:用于获取 ClassInfo 的 NodeEntity 标签。
实际:SimpleName 类用于获取 ClassInfo。
有只小跳蛙
相关分类