如何知道延迟加载是否通过hibernate映射工作?

时间:2017-03-31 03:52:11

标签: java hibernate hql hibernate-mapping

我有一个包含5列的Person对象,我使用了以下属性:

 property name="firstName" column="FirstName" type="string" lazy="false"
 property name="lastName" column="LastName" type="string" lazy="true"
 property name="city" column="City" type="string" lazy="true"
 property name="country" column="Country" type="string" lazy="true"
 property name="phone" column="Phone" type="string" lazy="true"

现在我如何确定我使用“From Person”返回的对象是否仅包含其中包含FIRSTNAME的数据行 - 假设其他4个是延迟加载的。我试过调试器但是当我潜入时我看到所有的价值已经存在......有什么东西缺失吗?感谢

3 个答案:

答案 0 :(得分:0)

这可能会有所帮助:When asked to load a lazy field, Hibernate loads all lazy fields

但是,如果它是一个目标,我认为它不会显着提高性能,除非你在表中有数百列。 Leazy加载在收集系列时会产生很大的不同。

答案 1 :(得分:0)

您可以使用config hibernate.show_sql=true并查看输出SQL。

答案 2 :(得分:0)

要在不检查生成的sqls的情况下查明它是否已加载延迟,您只需关闭会话然后访问该属性即可。

但是,您需要进一步增强字节码以启用此类行为。 http://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html_single/#performance-fetching-lazyproperties

例如,在增强字节码以启用延迟加载马(字符串属性)后注意并运行。

    Criteria criteria = session.createCriteria(Note.class);
    List<Note> list1 = criteria.list();
    session.close();
    String horse = list1.get(0).getHorse();

我得到了

Caused by: org.hibernate.LazyInitializationException: Unable to perform requested lazy initialization [stackoverflow.Note.horse] - no session and settings disallow loading outside the Session
    at org.hibernate.bytecode.enhance.spi.interceptor.Helper.throwLazyInitializationException(Helper.java:165)