javaspring-bootredis-cache

How to get Long (data type) value back from redis cache


I am storing userId as Long in redis cache in my spring boot application but while retrieving it returns Integer type and throws exception

java.lang.Integer cannot be cast to java.lang.Long

Below is the code snippet I am using.

@Cacheable(value = CacheConstants.GAUTH_CACHE, key = "#root.target.PASSWORD_SALT.concat(#loginTxt.toString())", unless = "#result == null")
    public Long getPasswordSaltFromLoginText(String loginTxt) {
        Long userId = null;
        if(StringUtils.isNotBlank(loginTxt)) {
            userId =  profileRepository.getUserIdForPasswordSalt(loginTxt, "PasswordSalt");
        }
        return userId;
    }

My Hibernate query is something like that. in which A.USR_ID is type Long

@Query(nativeQuery = true, value = "select A.USR_ID from user_tbl A, another_table B WHERE A.USR_ID = B.USR_ID AND "
            + " UPPER(A.loginTxt) = UPPER(:loginTxt) "
            + " AND B.prefName=:prefName ")

    Long getUserId(@Param("loginTxt") String loginTxt, @Param("prefName") String prefName);

Entity class is

@Entity
@Table(name="Table1", schema = "Schema_name")
public class Profile {

    @Id
    @Column(name="USR_Id")
    public Long USR_ID;

    @Column(name="other_column")
    public Long other_column;

    @Column(name="other_column2")
    public Long other_column2;

}

Solution

  • Redis cache doesn't support the Long data type. So I have stored whole profile object into redis cache and using getter(), I was able to get the Long value.

    @Query(nativeQuery = true, value = "select A.USR_ID,A.other_column,A.other_column2 from user_tbl A, another_table B WHERE A.USR_ID = B.USR_ID AND "
                + " UPPER(A.loginTxt) = UPPER(:loginTxt) "
                + " AND B.prefName=:prefName ")
    
        Profile getUserId(@Param("loginTxt") String loginTxt, @Param("prefName") String prefName);