Как вернуть значение Long (тип данных) из кэша Redis - PullRequest
2 голосов
/ 30 апреля 2019

Я храню userId as Long в кэше redis в моем приложении весенней загрузки, но при его получении возвращается тип Integer и выдается исключение

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

Ниже приведен фрагмент кода, который я использую.

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

Мой запрос в Hibernate что-то в этом роде.в котором A.USR_ID имеет тип 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
@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;

}

1 Ответ

1 голос
/ 02 мая 2019

Кэш Redis не поддерживает тип данных Long.Таким образом, я сохранил весь объект профиля в кэш Redis и, используя getter(), я смог получить значение Long.

@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);
...