Java org.neo4j.ogm.exception.core.MappingException:多个类具有简单名称

Java org.neo4j.ogm.exception.core.MappingException:多个类具有简单名称,java,neo4j,graph-databases,spring-data-neo4j,neo4j-ogm,Java,Neo4j,Graph Databases,Spring Data Neo4j,Neo4j Ogm,我已经创建了两个类,它们的类名相同,但包不同,节点属性标签也不同。只有在使用@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)

我已经创建了两个类,它们的类名相同,但包不同,节点属性标签也不同。只有在使用@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.ExecuteRequesteLegate类中的executeAndMap方法使用类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) {
private Iterable executeAndMap(类类型、字符串密码、,
映射参数、响应映射器(映射器){
返回会话.doInTransaction(()->{
if(type!=null&&session.metaData().classInfo(type.getSimpleName())!=null){
应为:用于获取ClassInfo的NodeEntity标签

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) {

实际:使用SimpleName类来获取ClassInfo。

使用FullQualifiedName类来获取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) {
它已被修复。参考如下


通过对neo4j ogm源代码的一个小改动,我使用了类的完整限定名,而不是简单的名称来从会话元数据中查找classInfo,这似乎很好。