我有一个实体(带有Hibernate查询接口的JPA注释),它具有两个属性的复合业务密钥(一个external-id和一个subsidiary-id (外键))和一个主db键。
我有一个JavaSE多线程进程,它运行“相对于一个子公司”,需要使用这个复合键查询/更新/插入那些实体(它获取那些external-ids的数据集)。
我可以保证,一旦这样的进程加载,任何其他进程都不会尝试插入/更新/删除该附属程序。
我想要的是在启动时加载该子公司的所有现有实体,然后对一对[externalId,subsidiaryId]进行每一次查询,以通过缓存,并且只有在数据库未通过的情况下才能进行查询。如果进程中的某个线程插入了一个实体,我当然希望将其添加到该缓存中。
什么是最好的行动方针?
我知道存在查询缓存,但据我所知,这仍然是第一次错过每个 [externalId,subsidiaryId]对。
谢谢,如果有什么我不清楚的地方,请问
更新
我不得不停止调查这个问题,但现在我又回到了这个问题上,我认为只有查询缓存和JB的答案是唯一适用的,这似乎是合理的。
我将接受JB的答案,因为它是有趣的,我可能会使用它(还不确定)。
发布于 2011-11-21 12:41:06
我将对实体使用二级缓存,在启动时查询所有补贴的实体(这将填充第二级缓存),并初始化一个应用程序缓存,它将只将[externalId, subsidiaryId]映射到[id]。
然后,每次搜索具有给定[externalId, subsidiaryId]的实体时,首先从应用程序缓存获取其ID,然后
如果ID不在缓存中,则执行查询,更新应用程序缓存,如果ID在缓存中,则返回已找到的实体
。
https://stackoverflow.com/questions/8127976
复制相似问题