org.neo4j.ogm.exception.core.MappingException:

我创建了 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。


慕莱坞森
浏览 171回答 1
1回答

有只小跳蛙

使用 Class FullQualifiedName 来获取 ClassInfo 效果很好。它已被修复。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java