Java 带有bean的entityListener中的无限循环
我创建一个EntityListener来审核特定的实体。存储状态更改的历史记录。我用AutowireHelper注入bean。我明白了 这可以很好地注入存储库,但要调用任何存储库的任何函数,请返回AutowireHelper.autowire行 这是我的代码,EntityListener执行AutowireHelper.autowire,当涉及到“查找”方法时,返回autowire行:Java 带有bean的entityListener中的无限循环,java,spring,hibernate,jpa,listener,Java,Spring,Hibernate,Jpa,Listener,我创建一个EntityListener来审核特定的实体。存储状态更改的历史记录。我用AutowireHelper注入bean。我明白了 这可以很好地注入存储库,但要调用任何存储库的任何函数,请返回AutowireHelper.autowire行 这是我的代码,EntityListener执行AutowireHelper.autowire,当涉及到“查找”方法时,返回autowire行: public class AuditListener { @Inject private U
public class AuditListener {
@Inject
private UserRepository userRepository;
@Inject
private ConfigurationRepository configurationRepository;
@PreUpdate
public void preUpdate(Object object) {
//TODO: pre update
AutowireHelper.autowire(this, this.userRepository, this.configurationRepository);
//I need get bbdd entities
List<Configuracion> config = this.configurationRepository.findAll();
Foo foo = (Foo) object;
System.out.println("Foo updated: " + foo.getId());
}
}
公共类AuditListener{
@注入
私有用户存储库用户存储库;
@注入
私有配置存储库配置存储库;
@预更新
公共无效预更新(对象){
//TODO:预更新
AutowireHelper.autowire(this,this.userRepository,this.configurationRepository);
//我需要bbdd实体
List config=this.configurationRepository.findAll();
Foo-Foo=(Foo)对象;
System.out.println(“Foo更新:+Foo.getId());
}
}
我的错误:
无法提交JPA事务;嵌套异常是
javax.persistence.RollbackException:提交
事务处理12:43:25291信息[stdout](http-/0.0.0:8080-1)在
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
12:43:25291信息[标准输出](http-/0.0.0:8080-1)在
invoke(NativeMethodAccessorImpl.java:57)
12:43:25291信息[标准输出](http-/0.0.0:8080-1)在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
12:43:25291信息[标准输出](http-/0.0.0:8080-1)在
java.lang.reflect.Method.invoke(Method.java:601)12:43:25291信息
[stdout](http-/0.0.0:8080-1)在
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
12:43:25291信息[标准输出](http-/0.0.0:8080-1)在
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
12:43:25291信息[标准输出](http-/0.0.0:8080-1)在
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
12:43:25291信息[标准输出](http-/0.0.0:8080-1)在
org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:362)|
完整跟踪:
14:01:35393错误[stderr](http-/0.0.0:8080-1)
org.springframework.transaction.TransactionSystemException:无法
提交JPA事务;嵌套异常是
javax.persistence.RollbackException:提交
事务处理14:01:35398错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:526)
14:01:35401错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)
14:01:35405错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)
14:01:35408错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.transaction.interceptor.TransactionSpectSupport.commitTransactionAfterReturning(TransactionSpectSupport.java:521)
14:01:35412错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:291)
14:01:35415错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
14:01:35419错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.aop.framework.ReflectiveMethodInvocation.procement(ReflectiveMethodInvocation.java:179)
14:01:35422错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
14:01:35425错误[stderr](http-/0.0.0:8080-1)位于
com.sun.proxy.$Proxy195.save(未知源)14:01:35428错误
[stderr](http-/0.0.0:8080-1)在
es.company.project.web.controller.foo.FooController.save(FooController.java:395)
14:01:35431错误[stderr](http-/0.0.0:8080-1)位于
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
14:01:35434错误[stderr](http-/0.0.0:8080-1)位于
invoke(NativeMethodAccessorImpl.java:57)
14:01:35436错误[stderr](http-/0.0.0:8080-1)位于
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
14:01:35437错误[stderr](http-/0.0.0:8080-1)位于
java.lang.reflect.Method.invoke(Method.java:601)14:01:35438错误
[stderr](http-/0.0.0:8080-1)在
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
14:01:35439错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
14:01:35441错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
14:01:35442错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:775)
14:01:35443错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
14:01:35445错误[stderr](http-/0.0.0:8080-1)位于
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.j
AuditListener.preUpdate
this.configurationRepository.findAll()
org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll
org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1166)
Session session = entityManager.unwrap(Session.class);
session.setHibernateFlushMode(FlushMode.MANUAL);
// do your db stuff
session.setHibernateFlushMode(FlushMode.AUTO);