在实现每个请求会话模式时,您如何考虑清除每个执行中的持久性上下文?

时间:2012-01-19 11:55:07

标签: multithreading jpa persistence

当您使用JPA并实现每个请求的会话模式(作为线程意义的范围事务)时,您是否经常需要清除每个事务结束时的持久性上下文? 在我的例子中,我这样做是因为我在ThreadLocal的实例中保存了创建的实体管理器,所以当我为每个线程使用一个相同的EntityManager实例时。但是有时,当用户执行新请求时,ThreadLocal会返回一个旧的持久性容器,其中包含旧的持久性数据。 您是否认为我的解决方案可以考虑可扩展性和性能的非功能性要求?

先谢谢你们, 最好的问候, 西蒙

1 个答案:

答案 0 :(得分:2)

如果新请求中存在陈旧的持久性上下文,则表明您的请求会话模式不正确。

您需要关闭EntityManager并在请求处理结束时将其从ThreadLocal中删除。如果这样做,则不需要调用clear()(实际需要的情况除外,例如,大批量操作)。