gpt4 book ai didi

spring-boot - spring boot 数据 redis 存储库 @Id 注释 vs jpa 存储库 @Id

转载 作者:IT王子 更新时间:2023-10-29 06:07:30 28 4
gpt4 key购买 nike

我正在使用 spring boot 1.5.2 和 spring boot data redis 1.8。

我有两个@Id 注解,一个用于JPA,另一个用于redis hash。这里我想使用 JPA @Id 值,它由 mysql 主键 AUTO_INCREMENT 生成。

但是我发现每次使用redis @Id annotaion时,在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生成的。

我尝试从Order中删除@RedisHash,发现无法为redis创建缓存。我找不到哪里错了。

非常感谢。

最佳答案

我们可以使用您需要的任何序列创建一个 key ,并在保存新 key 之前递增相同的序列

  1. On the start of an application

  2. On save of each key value

关于spring-boot - spring boot 数据 redis 存储库 @Id 注释 vs jpa 存储库 @Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43639235/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com