Skip to content

Commit f21e7c9

Browse files
committed
DATAGRAPH-1436 - Fix query generation for same label derived finders.
1 parent 9287f89 commit f21e7c9

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/main/java/org/springframework/data/neo4j/repository/query/CypherQueryCreator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ private Expression toCypherProperty(PersistentPropertyPath<Neo4jPersistentProper
534534
Neo4jPersistentEntity<?> owner = (Neo4jPersistentEntity<?>) leafProperty.getOwner();
535535
Expression expression;
536536

537-
if (owner.equals(this.nodeDescription)) {
537+
if (owner.equals(this.nodeDescription) && path.getLength() == 1) {
538538
expression = Cypher.property(Constants.NAME_OF_ROOT_NODE, leafProperty.getPropertyName());
539539
} else {
540540
PropertyPathWrapper propertyPathWrapper = propertyPathWrappers.stream()

src/test/java/org/springframework/data/neo4j/integration/imperative/RepositoryIT.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,30 @@ void findDeepSameLabelsAndTypeRelationships(@Autowired PetRepository repository)
777777

778778
}
779779

780+
@Test
781+
void findBySameLabelRelationshipProperty(@Autowired PetRepository repository) {
782+
try (Session session = createSession()) {
783+
session.run("CREATE (p1:Pet{name: 'Pet1'})-[:Has]->(p2:Pet{name: 'Pet2'})");
784+
}
785+
786+
Pet pet = repository.findByFriendsName("Pet2");
787+
assertThat(pet).isNotNull();
788+
assertThat(pet.getFriends()).isNotEmpty();
789+
}
790+
791+
@Test
792+
void findBySameLabelRelationshipPropertyMultipleLevels(@Autowired PetRepository repository) {
793+
try (Session session = createSession()) {
794+
session.run(
795+
"CREATE (p1:Pet{name: 'Pet1'})-[:Has]->(p2:Pet{name: 'Pet2'})-[:Has]->(p3:Pet{name: 'Pet3'})");
796+
}
797+
798+
Pet pet = repository.findByFriendsFriendsName("Pet3");
799+
assertThat(pet).isNotNull();
800+
assertThat(pet.getFriends()).isNotEmpty();
801+
assertThat(pet.getFriends().get(0).getFriends()).isNotEmpty();
802+
}
803+
780804
@Test
781805
void findLoopingDeepRelationships(@Autowired LoopingRelationshipRepository loopingRelationshipRepository) {
782806

@@ -3361,6 +3385,10 @@ interface PetRepository extends Neo4jRepository<Pet, Long> {
33613385
countQuery = "MATCH (p:Pet) return count(p)")
33623386
Page<Pet> pagedPetsWithParameter(@Param("petName") String petName, Pageable pageable);
33633387

3388+
Pet findByFriendsName(String friendName);
3389+
3390+
Pet findByFriendsFriendsName(String friendName);
3391+
33643392
}
33653393

33663394
interface RelationshipRepository extends Neo4jRepository<PersonWithRelationship, Long> {

0 commit comments

Comments
 (0)