Я создал 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.