Stackoverflow on @PreUpdate in Entity

Viewed 174

I am getting a stackoverflow exception whenerver I am trying to use the @PreUpdate annotation on entity, which uses the Embedded Auditable Entity and @EntityListeners.

In my code i am trying to fetch a user detail using static method, in order to update relevant field,

below mentioned my code

Entity class - Auditable

 /*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();
}

Static method

 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();
    }

TokenRegistryEntity

@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;
}

Any ideas?

Here's stacktrace:

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)

Purpose :

i need to update that field in order to result of the other table if it has a record i need to pass true (boolean value), if not then false,

i am looking for answer for this matter

0 Answers
Related