Hibernate 4在延迟加载方面有什么改进吗?
我们使用Hibernate作为JPA提供程序,并希望保持代码中没有hibernate特定的东西。我们不想使用Hibernate会话ojbects。在我们的应用程序中,我们还使用了Spring和JSF。我们认为存在一个OpenSessionInViewFilter
和一个OpenSessionInViewInterceptor
,但是这两者似乎只有在bean位于请求作用域时才能工作。拦截Spring session作用域(@Scope("session")
)似乎不起作用。
其他框架允许beans的weaving
或enhancement
。Hibernate 4或其他引入的新功能允许代码不受hibernate特定扩展的限制,现在是否可以实现类似的功能?(一些配置当然是可以的。)
我已经检查了What's new in Hibernate 4?,看到他们在会话工厂上工作,但是我不知道它是否有帮助。
发布于 2012-01-12 13:48:45
对于除了request作用域之外的其他作用域的LazyLoading,hibernate 4似乎没有任何改进。
发布于 2011-12-14 10:34:34
Hibernate是一个JPA实现。只需通过JPA API使用它,就没有Hibernate特定的代码了。即使直接使用Hibernate API,延迟加载也是使用JPA注释配置的。在Hibernate中使用延迟加载不需要任何特定于Hibernate的注释。
OpenSessionInView过滤器/拦截器没有直接链接到延迟加载。它只允许在事务结束后让会话打开。无论如何,这个过滤器/拦截器不会强迫您在自己的类中包含任何特定于Hibernate的代码,所以我真的不知道问题出在哪里。
请注意,Spring也支持JPA ( Hibernate是一个JPA引擎),并且具有OpenEntityManagerInViewFilter/Interceptor,它们与OpenSessionInViewFilter/interceptor扮演相同的角色,但用于JPA。
发布于 2011-12-14 15:24:13
我认为在会话作用域中不应该有实体bean。您应该在会话范围内拥有值对象,如果需要,还可以在请求期间加载相关的实体bean。
您是否在使用扩展PersistenceContexts?
https://stackoverflow.com/questions/8502503
复制