org.neo4j.ogm.exception.core.MappingException: 不止一个 class 有简单的名字

org.neo4j.ogm.exception.core.MappingException: More than one class has simple name

我创建了 2 个 classes,它们具有相同的 ClassName 但在不同的包中并且具有不同的 NodeEntity 标签。我面临以下 OGM 映射异常,仅当使用 @Query.

调用存储库方法时
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(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)

在调试时,我发现 executeAndMap 方法在 org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate class 使用 Class SimpleName,而不是分配的标签,找到 Class信息,这是导致问题的原因。

具有相同简单名称的 classes 存在于不同的包中,具有不同的标签并映射到不同的存储库接口。 Neo4jSession.loadAll 按预期工作,因为它使用 class 全限定名来获取 Class信息

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 标签。

实际:Class SimpleName 用于获取 ClassInfo。

使用 Class FullQualifiedName 获取 ClassInfo 效果很好。

已修复。参考如下,

Mapping Exception for entities with same Simple ClassName but different Labels