我正在一个可以并且会在JPA之外更改的系统上工作,因此我需要为每个请求建立新的会话,但是部署到TomEE中的JavaEE应用会在请求之间保留会话,导致实体在请求时被缓存此后已在应用程序之外的某个地方进行了更新。
我试图创建一个cfg.xml并以这种方式获取会话工厂,但是遇到了异常。我还尝试解开实体管理器类以这种方式获得工厂,但遇到了一个异常,说无法解开该类。我觉得这可能与TomEE和Hibernate的交互方式有关。我当前的设置是否有问题?还是我尝试将每个请求的会话实施错误,
答案 0 :(得分:0)
您遇到的问题不在于会话,它与会话缓存有关,因此您可以做的就是使会话缓存无效:
session.refresh(entity)
然后,如果存在差异,休眠将比较数据库数据和实体对象数据,然后它将再次执行sql查询。
session.clear()
将从会话缓存中删除所有内容,因此您不会获取旧数据。