java - 实体中 @PreUpdate 上的 Stackoverflow
问题描述
当我尝试在实体上使用@PreUpdate 注释时,我得到一个stackoverflow 异常,该注释使用嵌入式可审计实体和@EntityListeners。
在我的代码中,我试图使用静态方法获取用户详细信息,以更新相关字段,
下面提到了我的代码
实体类- 可审计
/*specify the date which modified*/
@Column(name = "is_belongs")
private boolean isBelongs=false;
@PrePersist
protected final void belongTo(){
this.isBelongs= TaxAdminSessionServiceHelper.checkAdminSesstion();
}
@PreUpdate
protected final void belongToUpdated(){
this.isBelongs=TaxAdminSessionServiceHelper.checkAdminSesstion();
}
静态方法
public static boolean checkAdminSesstion(){
HttpServletRequest curRequest =
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();
Optional<TokenRegistryEntity> tokenRegistryEntity = tokenRegistryService.getTokenByStatusAndUserId(Status.ACTIVE, UserPrincipal.getLoggedInUserId());
if (tokenRegistryEntity.isPresent() && curRequest.getAttribute("adminId") != null) {
Long adminId= Long.valueOf(request.getParameter("adminId"));
Optional<TaxAdminSessionEntity> taxAdminSessionEntity = taxAdminSessionRepository
.findByTokenAndUserIdAndAdminIdAndStatus(tokenRegistryEntity.get().getToken(),
UserPrincipal.getLoggedInUserId(),
adminId , SessionStatus.ACTIVE);
return taxAdminSessionEntity.isPresent();
}
return false;
}
TokenRegistryServiceImpl
@Override
public Optional<TokenRegistryEntity> getTokenByStatusAndUserId(Status status, Long userId) {
Optional<TokenRegistryEntity> tokenRegistryEntity=tokenRegistryRepository.findByUserIdAndStatus(userId,status);
if (tokenRegistryEntity.isPresent()) {
return tokenRegistryEntity;
}
return Optional.empty();
}
令牌注册实体
@Entity(name = "um_token_registry")
@Data
public class TokenRegistryEntity extends UserBaseEntity {
/*specify the serial version uid*/
private static final long serialVersionUID = -5035686189848426777L;
/*specify the unique id*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
/*specify the user token*/
@Column(name = "token")
private String token;
/*specify the username*/
@Column(name = "user_id")
private long userId;
/*specify the token status*/
@Column(name = "status")
@Enumerated(EnumType.STRING)
private Status status;
}
有任何想法吗?
这是堆栈跟踪:
java.lang.StackOverflowError: null
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:195)
at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.getService(SessionFactoryServiceRegistryImpl.java:98)
at org.hibernate.query.criteria.internal.compile.CriteriaCompiler.compile(CriteriaCompiler.java:63)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:735)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:109)
at jdk.internal.reflect.GeneratedMethodAccessor167.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:368)
at com.sun.proxy.$Proxy170.createQuery(Unknown Source)
at jdk.internal.reflect.GeneratedMethodAccessor167.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:314)
at com.sun.proxy.$Proxy170.createQuery(Unknown Source)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.createQuery(PartTreeJpaQuery.java:288)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.createQuery(PartTreeJpaQuery.java:241)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.doCreateQuery(PartTreeJpaQuery.java:106)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createQuery(AbstractJpaQuery.java:226)
at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:196)
at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:154)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:142)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:618)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:605)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:149)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy195.findByUserIdAndStatus(Unknown Source)
at com.kts.user.management.service.impl.TokenRegistryServiceImpl.getTokenByStatusAndUserId(TokenRegistryServiceImpl.java:120)
at com.kts.user.management.service.helper.TaxAdminSessionServiceHelper.checkAdminSesstion(TaxAdminSessionServiceHelper.java:40)
at com.kts.tax.service.common.entity.EmployerEntity.belongToUpdated(EmployerEntity.java:95)
目的 :
我需要更新该字段以得到另一个表的结果,如果它有一条记录我需要传递真(布尔值),如果不是那么假,
我正在寻找这件事的答案
解决方案
推荐阅读
- excel - 匹配字符串时选择大小写
- javascript - “加速模块地图中不存在模块”问题
- r - 变量在 purrr::pmap 中未分类
- google-chrome-app - Chrome webview 的 clearData 函数被识别为不存在
- python - 将变量从 Powershell 传递到 Python
- c# - 我不想在按钮边缘看到虚线
- python - sqlite3.OperationalError:“索引”附近:语法错误
- javascript - Glimmer VM 与虚拟 dom 有何不同?
- jquery - Sendbird - 如何进行 1 对 1 讨论
- python - 如何搜索子字符串,找到开头和结尾,然后检查该数据是否是工作日?