【发布时间】:2017-07-07 11:05:04
【问题描述】:
@Transactional
@Repository
@RepositoryDefinition(domainClass = UserApi.class, idClass = String.class)
public interface UserApiRepository{
@Cacheable(value="byUserId",key="#userId")
List<UserApi> findByUserId(String userId);
@CacheEvict(value="byUserId",key="#userApi.userId")
void save(UserApi userApi);
}
UsrApi.java
@Entity
@Table(name = "user_api")
public class UserApi {
private String id;
private String userId;
private String api;
private String platform;
private String apiType;
@Id
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getApi() {
return api;
}
public void setApi(String api) {
this.api = api;
}
public String getPlatform() {
return platform;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public String getApiType() {
return apiType;
}
public void setApiType(String apiType) {
this.apiType = apiType;
}
}
添加key="#userId"时出错。
java.lang.IllegalArgumentException: Null key returned for cache operation
(maybe you are using named params on classes without debug info?)
Builder[public abstract java.util.List com.awinson.repository.UserApiRepository.findByUserId(java.lang.String)]
caches=[byUserId] | key='#userId' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false'
当我使用“save”方法时,它不会更新缓存。
【问题讨论】:
-
你能把
UserApi类的代码也贴出来吗? -
我贴出UserApi类的代码。
-
那么您有一个用户 ID 为空的用户吗?您同时拥有
getId和getUserId的事实听起来令人担忧……哪个是用户的标识符? -
用户的userId标识符