public class MyClass{
@Id
@Column(name = "id", nullable = false)
Long id;
private AnotherClass anotherClass;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "another_id")
@Cacheable(value = "getAnotherClass", unless = "#result == null", key = "#id")
public AnotherClass getAnotherClass(){
return anotherClass;
}
}
public class AnotherClass{
@Id
@Column(name = "id", nullable = false)
Long id;
}
共有2个课程。 MyClass
包含AnotherClass
的外键。
我需要使用getAnotherClass
的{{1}}缓存id
的方式。
如何做到?
答案 0 :(得分:0)
Spring 没有方法参数不能使用@Cacheable 。 第一次调用带有@Cacheable注释的方法时,该方法将被执行,并使用键[作为方法参数传递的实例的参数]将其返回值存储在Cache中。 下次,如果使用相同的键(例如,相同的参数)调用该方法,则结果将直接从Cache中返回,而无需执行该方法。
您正在尝试将ORM(hibernate)与spring缓存混合使用,这似乎是个坏主意,相反,您可以利用hibernate提供的二级缓存,请参考{{3} }
如果您仍然想使用spring cacheable,请编写服务以实现spring cache。有条件检查是否在缓存存储库中有可用的对象,否则请使用ORM进行获取(请参阅https://www.journaldev.com/2980/hibernate-ehcache-hibernate-second-level-cache中的“组合@CachePut和@Cacheable以优化缓存使用”一节)