Skip to content

Problem with two-way relationship #2177

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
mdelmoral opened this issue Mar 12, 2021 · 4 comments
Closed

Problem with two-way relationship #2177

mdelmoral opened this issue Mar 12, 2021 · 4 comments
Assignees
Labels
type: bug A general bug

Comments

@mdelmoral
Copy link

mdelmoral commented Mar 12, 2021

Hi, I'm a pretty novice in Neo4J and SDN and I'm developing a followers/likes system.
My pom.xml has SDN 6.0.5

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>

My User node is:

@Node("User")
@Data
@NoArgsConstructor
@EqualsAndHashCode(exclude = {"likes", "hates"})
public class User {

    @Id
    private String name;

    @Relationship(type = "LIKES")
    private Set<User> likes;

    @Relationship(type = "HATES")
    private Set<User> hates;

    @Version
    private Long version;

    @CreatedDate
    private Instant createdAt;

    @LastModifiedDate
    private Instant lastModified;

    public User(String name) {
        this.name = name;
        this.likes = new HashSet<>();
        this.hates = new HashSet<>();
    }

    public void liking(User user) {
        if (likes == null) {
            this.likes = new HashSet<>();
        }
        this.likes.add(user);
    }
}

The method to create the "likes/follows" is:

@Transactional
public void setLikes(String userA, String userB) {
        final User userThatLikes = userRepository.findById(userA).orElseThrow();
        final User userLiked = userRepository.findById(userB).orElseThrow();

        userThatLikes.liking(userLiked);

        userRepository.save(userThatLikes);
}

I have only two users for this test: AAAA and BBBB
If AAAA likes BBBB the relationship is created well (AAAA - LIKES -> BBBB) ✅
The save method traces are:

2021-03-12 10:43:48.342 DEBUG 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : Executing:
OPTIONAL MATCH (hlp:`User`) WHERE hlp.name = $__id__ WITH hlp WHERE hlp IS NULL CREATE (n:`User`) SET n = $__properties__ RETURN id(n) UNION MATCH (n) WHERE (n.name = $__id__ AND n.version = $__version__) SET n += $__properties__ RETURN id(n)
2021-03-12 10:43:48.342 TRACE 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : with parameters:
:params {__id__: "AAAA", __version__: 0, __properties__: {createdAt: 2021-03-12T09:43:07.292113Z, name: "AAAA", lastModified: 2021-03-12T09:43:48.340836Z, version: 1}}
2021-03-12 10:43:48.389 DEBUG 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : Executing:
MATCH (startNode:`User`)-[rel:`LIKES`]->(:`User`) WHERE (startNode.name = $fromId AND NOT (id(rel) IN $__knownRelationShipIds__)) DELETE rel
2021-03-12 10:43:48.389 TRACE 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : with parameters:
:params {__knownRelationShipIds__: [], fromId: "AAAA"}
2021-03-12 10:43:48.396 DEBUG 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : Executing:
OPTIONAL MATCH (hlp:`User`) WHERE hlp.name = $__id__ WITH hlp WHERE hlp IS NULL CREATE (n:`User`) SET n = $__properties__ RETURN id(n) UNION MATCH (n) WHERE (n.name = $__id__ AND n.version = $__version__) SET n += $__properties__ RETURN id(n)
2021-03-12 10:43:48.396 TRACE 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : with parameters:
:params {__id__: "BBBB", __version__: 0, __properties__: {createdAt: 2021-03-12T09:43:11.659346Z, name: "BBBB", lastModified: 2021-03-12T09:43:48.392363Z, version: 1}}
2021-03-12 10:43:48.437 DEBUG 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : Executing:
MATCH (startNode:`User`) WHERE startNode.name = $fromId MATCH (endNode) WHERE id(endNode) = $toId MERGE (startNode)-[relProps:`LIKES`]->(endNode) RETURN id(relProps)
2021-03-12 10:43:48.438 TRACE 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : with parameters:
:params {toId: 39352, fromId: "AAAA"}
2021-03-12 10:43:48.441 DEBUG 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : Executing:
MATCH (startNode:`User`)-[rel:`LIKES`]->(:`User`) WHERE (startNode.name = $fromId AND NOT (id(rel) IN $__knownRelationShipIds__)) DELETE rel
2021-03-12 10:43:48.442 TRACE 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : with parameters:
:params {__knownRelationShipIds__: [], fromId: "BBBB"}
2021-03-12 10:43:48.444 DEBUG 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : Executing:
MATCH (startNode:`User`)-[rel:`HATES`]->(:`User`) WHERE (startNode.name = $fromId AND NOT (id(rel) IN $__knownRelationShipIds__)) DELETE rel
2021-03-12 10:43:48.444 TRACE 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : with parameters:
:params {__knownRelationShipIds__: [], fromId: "BBBB"}
2021-03-12 10:43:48.465 DEBUG 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : Executing:
MATCH (startNode:`User`)-[rel:`HATES`]->(:`User`) WHERE (startNode.name = $fromId AND NOT (id(rel) IN $__knownRelationShipIds__)) DELETE rel
2021-03-12 10:43:48.465 TRACE 11221 --- [nio-8080-exec-9] org.springframework.data.neo4j.cypher    : with parameters:
:params {__knownRelationShipIds__: [], fromId: "AAAA"}

But now, if BBBB tries to like to AAAA (BBBB - LIKES -> AAAA) ❌ , I get the next error:

2021-03-12 10:45:07.676 DEBUG 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : Executing:
OPTIONAL MATCH (hlp:`User`) WHERE hlp.name = $__id__ WITH hlp WHERE hlp IS NULL CREATE (n:`User`) SET n = $__properties__ RETURN id(n) UNION MATCH (n) WHERE (n.name = $__id__ AND n.version = $__version__) SET n += $__properties__ RETURN id(n)
2021-03-12 10:45:07.676 TRACE 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : with parameters:
:params {__id__: "BBBB", __version__: 1, __properties__: {createdAt: 2021-03-12T09:43:11.659346Z, name: "BBBB", lastModified: 2021-03-12T09:45:07.674080Z, version: 2}}
2021-03-12 10:45:07.724 DEBUG 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : Executing:
MATCH (startNode:`User`)-[rel:`LIKES`]->(:`User`) WHERE (startNode.name = $fromId AND NOT (id(rel) IN $__knownRelationShipIds__)) DELETE rel
2021-03-12 10:45:07.724 TRACE 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : with parameters:
:params {__knownRelationShipIds__: [], fromId: "BBBB"}
2021-03-12 10:45:07.733 DEBUG 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : Executing:
OPTIONAL MATCH (hlp:`User`) WHERE hlp.name = $__id__ WITH hlp WHERE hlp IS NULL CREATE (n:`User`) SET n = $__properties__ RETURN id(n) UNION MATCH (n) WHERE (n.name = $__id__ AND n.version = $__version__) SET n += $__properties__ RETURN id(n)
2021-03-12 10:45:07.734 TRACE 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : with parameters:
:params {__id__: "AAAA", __version__: 1, __properties__: {createdAt: 2021-03-12T09:43:07.292113Z, name: "AAAA", lastModified: 2021-03-12T09:45:07.732774Z, version: 2}}
2021-03-12 10:45:07.774 DEBUG 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : Executing:
MATCH (startNode:`User`) WHERE startNode.name = $fromId MATCH (endNode) WHERE id(endNode) = $toId MERGE (startNode)-[relProps:`LIKES`]->(endNode) RETURN id(relProps)
2021-03-12 10:45:07.775 TRACE 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : with parameters:
:params {toId: 39354, fromId: "BBBB"}
2021-03-12 10:45:07.780 DEBUG 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : Executing:
MATCH (startNode:`User`)-[rel:`LIKES`]->(:`User`) WHERE (startNode.name = $fromId AND NOT (id(rel) IN $__knownRelationShipIds__)) DELETE rel
2021-03-12 10:45:07.780 TRACE 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : with parameters:
:params {__knownRelationShipIds__: [], fromId: "AAAA"}
2021-03-12 10:45:07.783 DEBUG 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : Executing:
OPTIONAL MATCH (hlp:`User`) WHERE hlp.name = $__id__ WITH hlp WHERE hlp IS NULL CREATE (n:`User`) SET n = $__properties__ RETURN id(n) UNION MATCH (n) WHERE (n.name = $__id__ AND n.version = $__version__) SET n += $__properties__ RETURN id(n)
2021-03-12 10:45:07.784 TRACE 11221 --- [nio-8080-exec-1] org.springframework.data.neo4j.cypher    : with parameters:
:params {__id__: "BBBB", __version__: 1, __properties__: {createdAt: 2021-03-12T09:43:11.659346Z, name: "BBBB", lastModified: 2021-03-12T09:45:07.782973Z, version: 2}}
2021-03-12 10:45:07.851 ERROR 11221 --- [nio-8080-exec-1] o.s.t.i.TransactionInterceptor           : Application exception overridden by rollback exception

org.springframework.dao.OptimisticLockingFailureException: An entity with the required version does not exist.
	at org.springframework.data.neo4j.core.Neo4jTemplate.saveRelatedNode(Neo4jTemplate.java:567) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.neo4j.core.Neo4jTemplate.lambda$processNestedRelations$16(Neo4jTemplate.java:520) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:387) ~[spring-data-commons-2.4.5.jar:2.4.5]

Apart from the version problem, I find the ...UNION MATCH (n) WHERE (n.name = $__id__ AND n.version = $__version__)... quite strange because if my DB has other different nodes (Posts, Groups...) with name property they will take into account in the query. Wouldn't it be better something like ...UNION MATCH (n:User) WHERE...?

Maybe I mapped wrongly the two directions LIKES relationship but I don't understand why it works the first like and doesn't in the second in opposite direction.

If you need further information, please, let me know.

@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged label Mar 12, 2021
@michael-simons michael-simons added type: bug A general bug and removed status: waiting-for-triage An issue we've not yet triaged labels Mar 12, 2021
@michael-simons
Copy link
Collaborator

Thanks @mdelmoral

Apart from the version problem, I find the ...UNION MATCH (n) WHERE (n.name = $id AND n.version = $version)... quite strange because if my DB has other different nodes (Posts, Groups...) with name property they will take into account in the query. Wouldn't it be better something like ...UNION MATCH (n:User) WHERE...?

This is definite a bug! The query would make sense when an internal node id would have been used, but you're using an assigned Id. this must be fixed and is in the area of fanning out of queries when circles are detected @meistermeier

@michael-simons
Copy link
Collaborator

Related fix in the Cypher-DSL: neo4j/cypher-dsl@428c5c5

@meistermeier
Copy link
Collaborator

Solved with #2181

@meistermeier meistermeier added this to the 6.0.6 (2020.0.6) milestone Mar 16, 2021
@mdelmoral
Copy link
Author

@michael-simons Thank you for your prompt handling.
Before this issue, I was already planning to retry the OptimisticLockingFailureException by implementing a very simple system. I have this code that helps me to generate an OptimisticLockingFailureException effortlessly due to the bug, when the exception occurs it starts the transaction rollback but this same rollback produces an exception that wraps the previous one and ends up being an IllegalStateException.
I've checked that it doesn't really commit anything but I'm still wondering why the rollback of something so simple fails. Is it related to the fixed bug?
I'm using @EnableTransactionManagement annotation as well.
I paste the complete trace of the exception:

2021-03-17 08:45:07.751 DEBUG 2460 --- [  XNIO-1 task-1] org.springframework.data.neo4j.cypher    : Executing:
OPTIONAL MATCH (hlp:`User`) WHERE hlp.userName = $__id__ WITH hlp WHERE hlp IS NULL CREATE (n:`User`) SET n = $__properties__ RETURN id(n) UNION MATCH (n) WHERE (n.userName = $__id__ AND n.version = $__version__) SET n += $__properties__ RETURN id(n)
2021-03-17 08:45:07.752 TRACE 2460 --- [  XNIO-1 task-1] org.springframework.data.neo4j.cypher    : with parameters:
:params {__id__: "user_5", __version__: 2, __properties__: {createdAt: 2021-03-12T14:00:56.183559Z, lastModified: 2021-03-17T07:45:07.749956Z, userName: "user_5", version: 3}}
2021-03-17 08:45:12.626 DEBUG 2460 --- [  XNIO-1 task-1] o.s.d.n.c.t.Neo4jTransactionManager      : Participating transaction failed - marking existing transaction as rollback-only
2021-03-17 08:45:17.986 TRACE 2460 --- [  XNIO-1 task-1] o.s.d.n.c.t.Neo4jTransactionManager      : Triggering beforeCompletion synchronization
2021-03-17 08:45:17.987 DEBUG 2460 --- [  XNIO-1 task-1] o.s.d.n.c.t.Neo4jTransactionManager      : Initiating transaction rollback
2021-03-17 08:45:17.987 TRACE 2460 --- [  XNIO-1 task-1] o.s.d.n.c.t.Neo4jTransactionManager      : Triggering afterCompletion synchronization
2021-03-17 08:45:18.022 ERROR 2460 --- [  XNIO-1 task-1] o.s.t.i.TransactionInterceptor           : Application exception overridden by rollback exception

org.springframework.dao.OptimisticLockingFailureException: An entity with the required version does not exist.
	at org.springframework.data.neo4j.core.Neo4jTemplate.saveRelatedNode(Neo4jTemplate.java:567) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.neo4j.core.Neo4jTemplate.lambda$processNestedRelations$16(Neo4jTemplate.java:520) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:387) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.data.neo4j.core.Neo4jTemplate.processNestedRelations(Neo4jTemplate.java:449) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.neo4j.core.Neo4jTemplate.lambda$processNestedRelations$16(Neo4jTemplate.java:546) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:387) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.data.neo4j.core.Neo4jTemplate.processNestedRelations(Neo4jTemplate.java:449) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.neo4j.core.Neo4jTemplate.processRelations(Neo4jTemplate.java:439) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.neo4j.core.Neo4jTemplate.saveImpl(Neo4jTemplate.java:256) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.neo4j.core.Neo4jTemplate.save(Neo4jTemplate.java:228) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.neo4j.repository.support.SimpleNeo4jRepository.save(SimpleNeo4jRepository.java:131) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:524) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:531) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:156) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.4.jar:5.3.4]
	at com.sun.proxy.$Proxy81.save(Unknown Source) ~[na:na]
	at com.nacho.neo4jdemo.service.UserService.setLikes(UserService.java:29) ~[classes/:na]
	at com.nacho.neo4jdemo.service.UserService$$FastClassBySpringCGLIB$$d0d0f6d0.invoke(<generated>) ~[classes/:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.4.jar:5.3.4]
	at com.nacho.neo4jdemo.service.UserService$$EnhancerBySpringCGLIB$$1d4778df.setLikes(<generated>) ~[classes/:na]
	at com.nacho.neo4jdemo.controller.UserController.lambda$likes$0(UserController.java:34) ~[classes/:na]
	at com.nacho.neo4jdemo.utils.OptimisticLockingRetryableExecutor.execute(OptimisticLockingRetryableExecutor.java:54) ~[classes/:na]
	at com.nacho.neo4jdemo.controller.UserController.likes(UserController.java:39) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:517) ~[jakarta.servlet-api-4.0.4.jar:4.0.4]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) ~[jakarta.servlet-api-4.0.4.jar:4.0.4]
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:387) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:841) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1423) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

2021-03-17 08:45:18.034 ERROR 2460 --- [  XNIO-1 task-1] io.undertow.request                      : UT005023: Exception handling request to /user/likes

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Transaction must be open, but has already been closed.
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:517) ~[jakarta.servlet-api-4.0.4.jar:4.0.4]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) ~[jakarta.servlet-api-4.0.4.jar:4.0.4]
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:387) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:841) ~[undertow-core-2.2.4.Final.jar:2.2.4.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1423) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.lang.IllegalStateException: Transaction must be open, but has already been closed.
	at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.3.4.jar:5.3.4]
	at org.springframework.data.neo4j.core.transaction.Neo4jTransactionHolder.rollback(Neo4jTransactionHolder.java:80) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager.doRollback(Neo4jTransactionManager.java:209) ~[spring-data-neo4j-6.0.5.jar:6.0.5]
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:835) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:809) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:672) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.4.jar:5.3.4]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.4.jar:5.3.4]
	at com.nacho.neo4jdemo.service.UserService$$EnhancerBySpringCGLIB$$1d4778df.setLikes(<generated>) ~[classes/:na]
	at com.nacho.neo4jdemo.controller.UserController.lambda$likes$0(UserController.java:34) ~[classes/:na]
	at com.nacho.neo4jdemo.utils.OptimisticLockingRetryableExecutor.execute(OptimisticLockingRetryableExecutor.java:54) ~[classes/:na]
	at com.nacho.neo4jdemo.controller.UserController.likes(UserController.java:39) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.4.jar:5.3.4]
	... 50 common frames omitted

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug A general bug
Projects
None yet
Development

No branches or pull requests

4 participants