我正在使用Hibernate 3编写Web应用程序。
所以,过了一会儿,我注意到有些东西很慢。因此,我测试了Hibernate Profiler,发现Hibernate将无理地进行许多数据库调用以简化操作。原因当然是我加载了一个对象(该对象有几个“父母”),而这些“父母”还有其他“父母”。因此,即使我只需要基本对象,从根本上来说,hibernate都会加载它们。好的,所以我研究了延迟加载。这使我进入了Lazyloading- exception,因为我有一个MVC webapp。
所以,现在我对我的最佳处理方法有些困惑。基本上,我所需要做的只是更新对象上的单个字段。我已经有了对象键。
我应该:1.深入研究延迟加载。然后重写我的应用程序以进行开放会话视图?2.挖掘延迟加载。然后改写我的Dao的更具体。例如编写DAO方法,该方法将仅返回实例化的对象,而每个用例都需要什么?可能有很多额外的方法… 3.从头开始hibernate并自己做吗?4. Cant现在真的在考虑其他解决方案。有什么建议么?
最佳做法是什么?
Book b = (Book) session.load(Book.class, bookId); Author a = (Author) session.load(Author.class, authorId); b.setAuthor(a); session.save(b);
使用命名查询(在hbm文件或@NamedQuery中),以便在每次查询期间都不会解析它们。除非需要,否则不要使用Criteria API(在这种情况下,无法使用PreparedStatement缓存)
在您的Web应用程序中使用OSIV,因为它仅在/需要时才加载数据
session.setReadOnly(object, true)
c3p0.max_statements
setMaxResults()
setFirstResult()
其实有很多技巧,但是我现在还记得不多。