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