我想在我的应用程序中缓存一些数据库表,因为表中的内容每天只更新一次。
我让Spring Cache像这样工作:
@Service("stuffManager")
public class StuffManagerImpl implements StuffManager {
@Autowired
private StuffDao stuffDao;
@Override
@Cacheable("stuffCache")
public List<Stuff> getAllStuff() {
return stuffDao.getAllStuff();
}
}
@Repository("stuffDao")
public class StuffDaoHibernate implements StuffDao {
@Override
public List<Stuff> getAllStuff() {
return getHQLResult("select* from Stuff", null);
}
}
但如果我的getAllStuff
- 方法看起来像这样,是否可以使用Spring Cache但我只想缓存Stuff
- 表?
@Repository("stuffDao")
public class StuffDaoHibernate implements StuffDao {
@Override
public List<Stuff> getAllStuff() {
return getHQLResult("select Stuff.* from Stuff inner join OtherStuff on Stuff.Id = OtherStuff.Id", null);
}
}
答案 0 :(得分:2)
你不能这样做。 Spring缓存&#34;方法执行&#34; - 当您调用方法时,Spring检查密钥是否存在于缓存中并返回相应的值,否则调用该方法,数据从数据库中提取,添加到缓存并返回。当您将某个表与其他表连接时,会发生在数据库中。
您无法使用Spring Cache缓存数据库中的表。仅从方法返回的值。
如果要在内存中缓存某些数据库表,某些数据库会提供此类功能,但您必须在数据库中执行此操作,而不是在服务器上执行此操作。