使用spring的OpenEntityManagerInView

xiaoxiao2021-03-01  13

OpenEntityManagerInView和Hibernate的OpenSessionInView一样,服务端在接收到一个请求的时候开启EntityManager,在请求结束的时候才去关闭这个EntityManager,和JpaDaoSupport一起可以很好地工作。 使用OpenEntityManagerInView可以解决JPA延迟加载出现的LazyInitialize异常。如果不使用JPA的OpenEntityManagerInViewFilter,那么当使用玩getJpaTemplate().persist()或者remove()方法后,Spring就会自动关闭EntityManager,因此,你使用了延迟加载的对象加载属性的时候将会出现LazyInitialize异常。 OpenEntityManagerInViewFilter会把连接放到线程池里面,不是马上关闭。因此,在请求的过程当中,我们可以随时使用这个EntityManager。当请求结束之后才会关闭这个EntityManager。 不过在高并发的时候,EntityManager的生命周期会比较长(因为请求开始到请求结束这段时间长),EntityManager不会立刻关闭,导致连接池连接数占用的问题。因此高并发的系统最好不要使用OpenEntityManagerInView模式。 配置如下,在web.xml里面添加一个filter: <filter> <filter-name>jpaFilter</filter-name> <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>jpaFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
转载请注明原文地址: https://www.6miu.com/read-3849993.html

最新回复(0)