Hibernate 4是否会对延迟加载带来任何改进?
我们正在使用Hibernate作为JPA提供程序,并希望保持我们的代码清除特定于hibernate的东西。我们不想使用Hibernate会话ojbects。在我们的应用程序中,我们也使用Spring和JSF。我们认为有一个OpenSessionInViewFilter
和一个OpenSessionInViewInterceptor
但是当bean处于请求范围内时,两者似乎都有效。拦截Spring会话范围(@Scope("session")
)似乎不起作用。
其他框架允许bean的weaving
或enhancement
。 Hibernate 4现在可以实现类似的功能,或者其他新功能引入哪些代码可以保持代码不受特定于hibernate的扩展? (有些配置当然可以。)
我已经检查了What's new in Hibernate 4?并看到他们在sessionfactory上工作,但我不明白它是否有帮助。
答案 0 :(得分:0)
Hibernate是一个JPA实现。只需使用JPA API即可使用它,您将不再使用特定于Hibernate的代码。即使直接使用Hibernate API,也可以使用JPA注释配置延迟加载。您不需要任何特定于Hibernate的注释来使用Hibernate的延迟加载。
OpenSessionInView过滤器/拦截器没有直接链接到延迟加载。它只允许在事务结束后让会话打开。无论如何,这个过滤器/拦截器不会强迫你在自己的类中使用任何特定于Hibernate的代码,所以我真的不明白问题所在。
请注意,Spring也支持JPA(Hibernate是JPA引擎),并且具有OpenEntityManagerInViewFilter / Interceptor,它与OpenSessionInViewFilter / interceptor具有相同的作用,但是对于JPA。
答案 1 :(得分:0)
我认为你不应该在会话范围内拥有实体bean。您应该在会话范围中拥有值对象,并在必要时在请求期间加载相关的实体bean。
您使用的是Extended PersistenceContexts吗?
答案 2 :(得分:0)
hibernate 4对于其他范围的LazyLoading似乎没有任何改进,而不是请求范围。