当您使用JPA并实现每个请求的会话模式(作为线程意义的范围事务)时,您是否经常需要清除每个事务结束时的持久性上下文? 在我的例子中,我这样做是因为我在ThreadLocal的实例中保存了创建的实体管理器,所以当我为每个线程使用一个相同的EntityManager实例时。但是有时,当用户执行新请求时,ThreadLocal会返回一个旧的持久性容器,其中包含旧的持久性数据。 您是否认为我的解决方案可以考虑可扩展性和性能的非功能性要求?
先谢谢你们, 最好的问候, 西蒙
答案 0 :(得分:2)
如果新请求中存在陈旧的持久性上下文,则表明您的请求会话模式不正确。
您需要关闭EntityManager
并在请求处理结束时将其从ThreadLocal
中删除。如果这样做,则不需要调用clear()
(实际需要的情况除外,例如,大批量操作)。