当前位置: 首页 > 知识库问答 >
问题:

Spring Boot数据redis仓库@Id注释vs jpa仓库@Id

封永嘉
2023-03-14

我使用的是spring boot 1.5.2和spring boot数据redis 1.8。

我有两个@Id注释,一个用于JPA,另一个用于redis哈希。这里我想使用由mysql主键自动增量生成的JPA@Id值。

但我发现每次使用redis@Id注释时,redis中我的Id都会是另一个随机值,但我想使用mysql主键。

我的实体是这样的:

@Entity
@Table(name = "orders")
@RedisHash(value = "order")
public class Order {
    private Long id;
    private Long userId;

    @org.springframework.data.annotation.Id //for redis
    @Id //for mysql
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Basic
    @Column(name = "user_id")
    public Long getUserId() {
        return userId;
    }
}

我的服务是这样的:

@CachePut(value = "order", key = "#order.id")
@Override
public void save(OrderDTO orderDTO) {
    try {
        Order order = BeanMapper.map(orderDTO, Order.class);
        order = orderRepository.save(order);
        System.out.println(order);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我得到了以下错误:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'id' cannot be found on null

redis的数据如下:

127.0.0.1:6379> keys *
1) "order"
2) "order:1222702657038933405"

我想得到这样的结果:

order:12

其中12是由mysql PRIMary KEY生成的。

我试图从无法为redis创建缓存的订单中删除@RedisHash。我找不到哪里错了。

非常感谢。

共有1个答案

卫松
2023-03-14

我们可以用你需要的任何序列创建一个密钥,并在保存新密钥之前增加相同的序列

>

  • 在申请开始时

    保存每个键值

  •  类似资料:
    • 我正在努力让Spring JPA Data为我工作,但一直在努力。问题出在这里。 我有两个域类,它们之间有一个简单的一对多关系: 我已经为每个类设置了存储库接口:CardRepository,扩展JpaRepository的用户存储库,两个存储库都注入到服务中 非常基本的设置。someMethod() 出现问题,其中我用它的标识符查询了一个用户,然后尝试获取映射@OneToMany的列表,然后发生

    • 在使用Spring数据存储库时发现一些奇怪的行为。 我写了这些类和接口: 当我尝试测试UserRepositoryImpl时,java。lang.StackOverflowerr被抛出 我发现save()方法存在一些问题。此外,delete()方法会引发stackoverflow。 我已经找到了解决办法。当我更改将存储库接口扩展为(例如)JpaUserRepository的接口的名称时,我的问题就

    • 主要内容:1.离线数仓,2.Lambda架构,3.Kappa架构,4.Smack架构,5.湖仓一体传统数仓 离线数仓 实时数仓 Lambda架构 Kappa架构 Smack架构 数据湖架构 仓湖一体架构 1.离线数仓 2.Lambda架构 Lambda架构是大数据平台里最成熟、最稳定的架构,它的核心思想是:将批处理作业和实时流处理作业分离,各自独立运行,资源互相隔离。 (1)Batch Laye:主要负责所有的批处理操作,支撑该层的技术以Hive、Spark-SQL或MapReduce这类批处

    • Repository,仓库,简称 Repo。为项目添加一个 Git 仓库以后,你就可以用 Git 为项目做版本控制了。 git init 上面的命令可以为项目初始化一个仓库,这个动作只需要执行一次,它会在项目下面创建一个 .git 目录,Git 会把它需要的东西存储在这个 .git 目录里面,它其实就是项目的仓库。 练习 1,创建一个项目。打开你的命令行界面,执行: cd ~/desktop m

    • 仓库(Repository),这里指的是可以使用包管理工具安装的软件包的列表。系统自带一些仓库,如果你发现要安装的包在这些仓库里不存在,你可能需要在系统上安装额外的仓库。 仓库列表 先查看一下安装在系统上的仓库列表,执行: yum repolist 返回类似的东西: repo id repo name

    • 镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。 一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的