【发布时间】:2017-09-24 03:41:46
【问题描述】:
我正在使用spring boot 1.5.2,以及spring boot data redis 1.8。
我有两个@Id 注解,一个用于JPA,另一个用于redis hash。这里我想使用由 mysql 主键 AUTO_INCREMENT 生成的 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生成的。
我尝试从Order 中删除@RedisHash,发现无法为redis 创建缓存。我找不到哪里错了。
非常感谢。
【问题讨论】:
标签: spring-boot redis spring-cache spring-data-redis