我有两个实体
A和B,多对多关系
我将两者都设置为延迟加载,因为在大多数情况下我只需要A,而不需要相关的b。
我启用了ehcache。在少数情况下,我的代码执行
A a = instance_of_ADao.getA();
for(B b : a.getBs() ) {
///
}
第一次调用getta()从缓存中查找A,但第二次调用(getBs())没有,而是生成一个查询:
SELECT * from A_B LEFT OUTER JOIN B on A_B.B_ID = B.B_ID WHERE A_B.A_ID = .....;
在此select之后,它将B对象存储在缓存中。
我猜原因是第二次调用中的查询实际上是拉A_B,但我没有A_B的映射(它只是a在a的映射),所以我不能定义它来使用缓存。
那么是否有一种方法可以在调用a.t getbs()时利用缓存?
谢谢杨
您需要将关联本身配置为缓存。如果您正在使用注释,您可以在a中的b集合上添加@Cache注释。