java - 如何从redis缓存取回Long(数据类型)值

标签 java spring-boot redis-cache

我将 userId 作为 Long 存储在我的 spring boot 应用程序的 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;

}

最佳答案

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

关于java - 如何从redis缓存取回Long(数据类型)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55916488/

相关文章:

Java 序列化 : Must E be serializable in ArrayList<E>?

spring-boot - DelegatingSerializationFilter 无法设置 ObjectFilter : null warning message is repetitively appearing in console

java - Spring JPA 不为实体创建表

redis - Azure Redis 缓存未正确过期

java - 确定是否由于派生类实例创建而调用构造函数的最佳方法

Java - 此代码中的初始化顺序是什么?

Redis.io 与 .Net 中的 Azure Redis 缓存

java - 如何创建将为 Redis 缓存(NoSQL)和 Sybase ASE(关系数据库)服务的单个 Java 域类?

java - 在 JTextArea 中键入会影响其他组件

spring-boot - 使用 Testcontainers 执行运行集成测试的 Gitlab CI 管道作业时出现问题