Closed
Description
Issue
- It is normal when use Neo4jRepository findAll(pageable)
- It is normal when use custom query findAllWithOutgoingEdge(descripted below), less than 20 query nodes data.
- It is error query more than 20+ nodes data when use custom query findAllWithOutgoingEdge(descripted below)
Error
when use custom query(descipted below), and query more than 20+ nodes data,
java.lang.StackOverflowError: null
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:673) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:489) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
at org.springframework.data.mapping.model.ClassGeneratingPropertyAccessorFactory.getPropertyAccessor(ClassGeneratingPropertyAccessorFactory.java:104) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.mapping.model.InstantiationAwarePropertyAccessorFactory.lambda$getPropertyAccessor$0(InstantiationAwarePropertyAccessorFactory.java:46) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.mapping.model.InstantiationAwarePropertyAccessor.getProperty(InstantiationAwarePropertyAccessor.java:157) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.lambda$populateFrom$6(DefaultNeo4jEntityConverter.java:519) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.lambda$doWithAssociations$0(AssociationHandlerSupport.java:51) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:395) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.doWithAssociations(AssociationHandlerSupport.java:49) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.populateProperties(DefaultNeo4jEntityConverter.java:355) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.map(DefaultNeo4jEntityConverter.java:316) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.createInstanceOfRelationships(DefaultNeo4jEntityConverter.java:618) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.lambda$populateFrom$6(DefaultNeo4jEntityConverter.java:541) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.lambda$doWithAssociations$0(AssociationHandlerSupport.java:51) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:395) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.doWithAssociations(AssociationHandlerSupport.java:49) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.populateProperties(DefaultNeo4jEntityConverter.java:355) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.map(DefaultNeo4jEntityConverter.java:316) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.createInstanceOfRelationships(DefaultNeo4jEntityConverter.java:618) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.lambda$populateFrom$6(DefaultNeo4jEntityConverter.java:541) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.lambda$doWithAssociations$0(AssociationHandlerSupport.java:51) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:395) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.doWithAssociations(AssociationHandlerSupport.java:49) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.populateProperties(DefaultNeo4jEntityConverter.java:355) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.map(DefaultNeo4jEntityConverter.java:316) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.createInstanceOfRelationships(DefaultNeo4jEntityConverter.java:618) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.lambda$populateFrom$6(DefaultNeo4jEntityConverter.java:541) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.lambda$doWithAssociations$0(AssociationHandlerSupport.java:51) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:395) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.doWithAssociations(AssociationHandlerSupport.java:49) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.populateProperties(DefaultNeo4jEntityConverter.java:355) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.map(DefaultNeo4jEntityConverter.java:316) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.createInstanceOfRelationships(DefaultNeo4jEntityConverter.java:618) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.lambda$populateFrom$6(DefaultNeo4jEntityConverter.java:541) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.lambda$doWithAssociations$0(AssociationHandlerSupport.java:51) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:395) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.doWithAssociations(AssociationHandlerSupport.java:49) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.populateProperties(DefaultNeo4jEntityConverter.java:355) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.map(DefaultNeo4jEntityConverter.java:316) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.createInstanceOfRelationships(DefaultNeo4jEntityConverter.java:618) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.lambda$populateFrom$6(DefaultNeo4jEntityConverter.java:541) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.lambda$doWithAssociations$0(AssociationHandlerSupport.java:51) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:395) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.doWithAssociations(AssociationHandlerSupport.java:49) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.populateProperties(DefaultNeo4jEntityConverter.java:355) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.map(DefaultNeo4jEntityConverter.java:316) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.createInstanceOfRelationships(DefaultNeo4jEntityConverter.java:618) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.DefaultNeo4jEntityConverter.lambda$populateFrom$6(DefaultNeo4jEntityConverter.java:541) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.lambda$doWithAssociations$0(AssociationHandlerSupport.java:51) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:395) ~[spring-data-commons-2.7.2.jar:2.7.2]
at org.springframework.data.neo4j.core.mapping.AssociationHandlerSupport.doWithAssociations(AssociationHandlerSupport.java:49) ~[spring-data-neo4j-6.3.2.jar:6.3.2]
...
...
Env config
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
<version>2.7.2</version>
</dependency>
Entity Code
Node Class TxjmNodeEntity
@Node("hktxjm")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class TxjmNodeEntity {
@Id
@EqualsAndHashCode.Include
Long id;
@GeneratedValue(UUIDStringGenerator.class)
@EqualsAndHashCode.Include
@Property
String uid;
@Property
private String name;
@Property
private String shape;
@Property
private String subShape;
@Property
private String subShapeName;
// @DynamicLabels
// public Set<String> moreLabels;
@CompositeProperty
private Map<String, String> props = new HashMap<>();
@JsonManagedReference
@Relationship(type = "guanXi", direction = Relationship.Direction.INCOMING)
private List<TxjmEdgeEntity> edgeIncoming;
@JsonManagedReference
@Relationship(type = "guanXi", direction = Relationship.Direction.OUTGOING)
private List<TxjmEdgeEntity> edgeOutgoing;
...
}
RelationshipProperties Class TxjmEdgeEntity
@RelationshipProperties
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class TxjmEdgeEntity {
@RelationshipId
@EqualsAndHashCode.Include
private Long id;
@GeneratedValue(UUIDStringGenerator.class)
@Property
private String uid;
@Property
private String name;
@Property
private String shape;
@Property
private String subShape;
@Property
private String subShapeName;
@CompositeProperty
private Map<String, String> props = new HashMap<>();
@JsonBackReference
@TargetNode
private TxjmNodeEntity targetNode;
...
}
Neo4jRepository Class TxjmNodeEntityRepository
@Repository
public interface TxjmNodeEntityRepository extends Neo4jRepository<TxjmNodeEntity, Long> {
// **It is normal**
// **Neo4jRepository query**
Page<TxjmNodeEntity> findAll(Pageable pageable);
// **It is error, when query more than 20+ nodes data**
// **custom query**
@Query(value = """
MATCH (s:hktxjm)
WITH s OPTIONAL MATCH (s)-[r:guanXi]->(t:hktxjm)
RETURN s, collect(r), collect(t)
:#{orderBy(#pageable)} SKIP $skip LIMIT $limit
""",
countQuery = "MATCH (s:hktxjm) RETURN count(s)")
// @Query(value = """
// MATCH p=(s:hktxjm)-[r:guanXi]->(t:hktxjm)
// RETURN s, relationships(p), nodes(p)
// :#{orderBy(#pageable)} SKIP $skip LIMIT $limit
// """,
// countQuery = "MATCH (s:hktxjm) RETURN count(s)")
Page<TxjmNodeEntity> findAllWithOutgoingEdge(Pageable pageable);
}