org.neo4j.ogm.exception.core.MappingException: более одного класса имеют простое имя - PullRequest
0 голосов
/ 19 сентября 2019

Я создал 2 класса с тем же ClassName, но в разных пакетах и ​​с разными метками NodeEntity.Ниже приведено исключение OGM Mapping Exception, только при вызове метода репозитория с использованием @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$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)

При отладке я обнаружил, что executeAndMap метод в org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate использует класс 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) {

Ожидается: метка NodeEntity будет использоватьсячтобы получить ClassInfo.

Actual: Class SimpleName используется для получения ClassInfo.

...