OpenEntityManagerInView等效于Junit和Quartz Jobs

时间:2011-08-10 20:29:55

标签: spring jpa quartz-scheduler junit4

对于依赖于实体的Lazy Initialization Open Session [EntityManager] in View的类的使用,是否存在任何标准方式(或替代(fetch = FetchType.LAZY)) 以下两个用例:

  1. 在JUnit测试用例中

  2. 在石英工作中

  3. 对于上述两种情况,OSIV模式都不起作用,因为没有Web请求进入系统。如何在这种情况下进行延迟加载工作?

    PS:Spring的OpenEntityManagerInViewFilterOpenEntityManagerInViewInterceptor都是面向Web请求的。

    1. 我无法通过在存储库(DAO)中关闭会话之前加载虚拟get来预取所有此类关系/ entites。
    2. 我知道,对于JUnit,我可以在@Before / @after中手动打开/关闭EM。但我正在寻找更优雅和标准的东西。
    3. Rerference: LazyInitializationException due to no session defined in "parent" application context in Hibernate 3 in a moduled Spring application using annotations

1 个答案:

答案 0 :(得分:0)

交易是您所需要的。打开一个事务,获取数据,操作它,然后在完成后关闭事务。 Spring将EntityManager生命周期绑定到事务的生命周期,并在需要时将其保持打开状态。

Spring Transaction Management本身就是一个重要的主题,但使用它确实非常简单。请参阅docs