1

Hibernate 4 是否带来了关于延迟加载的任何改进?

我们使用 Hibernate 作为 JPA 提供程序,并希望保持我们的代码干净,不包含特定于 hibernate 的内容。我们不想使用 Hibernate 会话对象。在我们的应用程序中,我们也使用 Spring 和 JSF。我们认为有 aOpenSessionInViewFilter和 aOpenSessionInViewInterceptor但是两者似乎都只在 bean 在请求范围内时才起作用。拦截 Spring 会话范围 ( @Scope("session")) 似乎不起作用。

其他框架允许weavingenhancementbean。Hibernate 4 现在是否可以实现类似的功能,或者引入其他新功能以使代码不受休眠特定扩展的影响?(有些配置当然没问题。)

我已经检查了 Hibernate 4 中有什么新功能? 并看到他们在 sessionfactory 上工作,但是我不明白它是否有帮助。

4

3 回答 3

0

Hibernate 是一个 JPA 实现。只需使用 JPA API 即可,您将摆脱特定于 Hibernate 的代码。即使直接使用 Hibernate API,延迟加载也是使用 JPA 注释配置的。您不需要任何特定于 Hibernate 的注释来使用 Hibernate 的延迟加载。

OpenSessionInView 过滤器/拦截器不直接链接到延迟加载。它只允许在事务结束后让会话打开。无论如何,这个过滤器/拦截器不会强迫你在你自己的类中有任何特定于 Hibernate 的代码,所以我真的不明白问题出在哪里。

请注意,Spring 也支持 JPA(Hibernate 是一个 JPA 引擎),并且具有 OpenEntityManagerInViewFilter/Interceptor,它们的作用与 OpenSessionInViewFilter/interceptor 相同,但用于 JPA。

于 2011-12-14T10:34:34.447 回答
0

我认为您不应该在会话范围内拥有实体 bean。您应该在会话范围内拥有值对象,并在必要时在请求期间加载相关的实体 bean。

你在使用扩展的 PersistenceContexts 吗?

于 2011-12-14T15:24:12.970 回答
0

对于请求范围以外的其他范围的延迟加载,休眠 4 似乎没有任何改进。

于 2012-01-12T13:48:45.130 回答