Java 如何在cacheManager中管理多个用户

Java 如何在cacheManager中管理多个用户,java,jpa,Java,Jpa,这就是我在缓存中保存用户详细信息的方式,我将使用以下方法检索: entityManager = JPAUtil.getEntityManager(); UsersModel user = entityManager.find(UsersModel.class,User_Id); cacheManager = CacheManager.getInstance(); cacheManager.cacheObject("user", user); 但是当多个用户登录时,问题就出现了,我只会得到一个用

这就是我在缓存中保存用户详细信息的方式,我将使用以下方法检索:

entityManager = JPAUtil.getEntityManager();
UsersModel user = entityManager.find(UsersModel.class,User_Id);
cacheManager = CacheManager.getInstance();
cacheManager.cacheObject("user", user);
但是当多个用户登录时,问题就出现了,我只会得到一个用户信息

我试图将
userID
保存在缓存密钥中,但在检索记录时,我需要知道密钥

有人知道解决这个问题的最佳方法吗?
我正在使用
Strust2
framework

UsersModel user = (UsersModel)cacheManager.retriveObject("user");
user.getUserID();
Hashtable cacheManager=new Hashtable();
这里是user1登录时的场景,我将user1对象放在缓存中

cacheManager.cacheObject(“用户”,user)

登录成功后,用户1单击帐户信息,我必须获取当前用户详细信息

UsersModel用户=(UsersModel)cacheManager.RetrieveObject(“用户”)

getUserID()

user.getName()


同时,当user2登录时…它将覆盖缓存…user2详细信息现在已存储…因此,当user1再次单击AccInfo时,他将获得user2信息…我只需要保留相应的用户id,直到他注销…

CacheManager是一个单例,这意味着它在请求之间共享。您当前所做的是每次为所有会话覆盖
用户
缓存项。 您可以尝试将新的CacheManager实例绑定到会话作用域,但为每个用户单独生成CacheManager的成本相当高

我会这样做:只需在会话中保持
userId
,然后

Hashtable<CacheKey, Object> cacheManager = new Hashtable<CacheKey,Object>();


请记住,可能会从缓存中删除对象,因此您最终需要再次查询该对象。

您可以在CacheManager中存储一个集合而不是单个对象。您是指这样的示例:“Set Set=(Set)CacheManager.retrieveObject(“用户”);for(UsersModel model:Set){…}注意这里使用的是哪个CacheManager吗?电子缓存?其他的?然后可能会标记您的问题,因为您可以看到我的问题…我已经更新了…我正在使用HASHTABLE(java.util)。HASHTABLE没有这样的方法“retrieveObject”…如果您正在使用Struts 2,请按此方式检查。一旦您有权访问您的
用户ID
,您就可以将其传递给您的数据访问方法。
cacheManager.cacheObject("user/" + userId, user);
UsersModel user = (UsersModel)cacheManager.retriveObject("user/" + userId);