java - 关于 Hibernate LazyInitialization 错误

标签 java performance hibernate orm

我在EJB2.0层上使用事务,并从那里调用DAO层,其中对db进行hibernate调用。

我现在遇到的问题是,hibernate 正在对数据库进行多次调用,因为我设置了 lazy="false",现在我尝试更改 lazy="true"但现在我们有了自己的:

org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed

错误消息。

我对SO做了一些研究,发现解决方案可能是

 <prop key="hibernate.default_batch_fetch_size">30</prop>
 <prop key="hibernate.jdbc.fetch_size"></prop>

我的问题是 fetch_size 的默认大小是多少,以及这是否是解决此问题的正确方法。

我想要做的就是确保应用程序不会多次调用数据库来运行所有这些 N 查询,因为现在在页面之间导航非常痛苦,并且使应用程序非常慢每次点击页面,都会在后台运行 N 个查询,这会增加应用程序加载时间。

更新

以下是如何设置交易:

 * @hibernate.class table="SCHEDULE_ENTRY" discriminator-value="task" lazy="true"
 * @hibernate.discriminator column="KIND" length="4"

非常感谢任何提高 hibernate 性能的建议。

最佳答案

在关闭 session 之前访问对象的成员。这是主要问题。

关于java - 关于 Hibernate LazyInitialization 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197473/

相关文章:

java:正则表达式

java - Prim算法,请解释

java - 将 Tuple2 添加到 Scala 列表

c++ - 如何提高迭代精度?

Java - 如何在 Java 中创建具有所需大小的变量?

Hibernate:需要在事务中保存同一个对象两次

java - 在 Heroku 上部署 war 所需的步骤

java - 测试井字游戏的获胜条件

java - 如何为 Hibernate 域对象编写单元测试

java - 如何通过 Hibernate 将枚举字段设置为 Integer 到 db?