Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Ehcache-Spring-自定义密钥生成器_Java_Spring_Annotations_Ehcache - Fatal编程技术网

Java Ehcache-Spring-自定义密钥生成器

Java Ehcache-Spring-自定义密钥生成器,java,spring,annotations,ehcache,Java,Spring,Annotations,Ehcache,我当时正在使用,遇到了以下情况: 我有一个简单的POJO,如下所示 class Person{ private Long id; private String name //some code } 现在在道我有 public Person getPerson(Long personId){} public Person UpdatePerson(Person person){} 现在在updateperson中,我需要类person的参数,并且我需要使用person的personId

我当时正在使用,遇到了以下情况:

我有一个简单的POJO,如下所示

class Person{
 private Long id;
 private String name
 //some code
}
现在在道我有

public Person getPerson(Long personId){}

public Person UpdatePerson(Person person){}
现在在updateperson中,我需要类person的参数,并且我需要使用person的personId作为缓存的键


这可以通过为每个类实现或放置if/else块来实现,但是我们可以提供一些可配置的东西来给参数字段作为键吗?

这都可以通过注释来完成

如果
updatePerson
方法采用了您正在持久化的修改后的
Person
,则需要使用
TriggersRemove
对更新方法进行注释,以将更新后的Person从缓存中逐出。然后需要重新运行
getPerson
方法来缓存更新的Person

请参见网站上的示例代码:

基于上面链接中的
updatewather
方法,如果我理解手头的问题,您可以执行以下操作:

@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
                    name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(Long personId) {
    return (Person)(getSession().get(Person.class, personId));
}

@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
                    name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
    getSession().merge(person);           
    return getPerson(personId);
 }

这一切都可以通过注释来完成

如果
updatePerson
方法采用了您正在持久化的修改后的
Person
,则需要使用
TriggersRemove
对更新方法进行注释,以将更新后的Person从缓存中逐出。然后需要重新运行
getPerson
方法来缓存更新的Person

请参见网站上的示例代码:

基于上面链接中的
updatewather
方法,如果我理解手头的问题,您可以执行以下操作:

@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
                    name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(Long personId) {
    return (Person)(getSession().get(Person.class, personId));
}

@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
                    name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
    getSession().merge(person);           
    return getPerson(personId);
 }

你能切换到Spring 3.1吗

您的用例可以通过以下方式轻松解决:

@Cacheable(key="#person.personId")

注释。

能否切换到Spring 3.1

您的用例可以通过以下方式轻松解决:

@Cacheable(key="#person.personId")

注释。

尝试将@PartialCacheKey添加到getPerson方法的personId参数中

就这样,

@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
                    name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(@PartialCacheKey Long personId) {
    return (Person)(getSession().get(Person.class, personId));
}

@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
                    name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
    getSession().merge(person);           
    return getPerson(personId);
 }

尝试将@PartialCacheKey添加到getPerson方法的personId参数中

就这样,

@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
                    name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(@PartialCacheKey Long personId) {
    return (Person)(getSession().get(Person.class, personId));
}

@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
                    name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
    getSession().merge(person);           
    return getPerson(personId);
 }

你能切换到Spring 3.1吗?然后通过
@Cacheable(key=“#person.personId”)
annotation@Tomasz让我看看。thanks@Tomasz成功了。我切换到Spring Cachable Abstraction很高兴我能帮上忙,我将我的评论提升为一个答案,如果你觉得它有用的话。你能切换到Spring 3.1吗?然后通过
@Cacheable(key=“#person.personId”)
annotation@Tomasz让我看看。thanks@Tomasz成功了。我切换到Spring Cachable Abstraction很高兴我能帮上忙,我把我的评论提升为一个答案,如果你觉得有用的话;上面链接的代码是您正在使用的lib的官方示例代码。您链接的代码不能解决我的问题。我删除该注释,因为我认为我误解了它。对不起。但是你的答案仍然不能回答我的问题,或者如果你认为它能回答,而我没有得到答案,请详细说明,并作出回应,这才是真正的问题所在。为了更新Pojo,我们需要传递两个不同的参数,这是一个大胆的声明;上面链接的代码是您正在使用的lib的官方示例代码。您链接的代码不能解决我的问题。我删除该注释,因为我认为我误解了它。对不起。但是你的答案仍然不能回答我的问题,或者如果你认为它能回答,而我没有得到答案,请详细说明,并作出回应,这才是真正的问题所在。为了更新Pojo,我们需要以不同的方式传递两个参数