我有一个包含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个是延迟加载的。我试过调试器但是当我潜入时我看到所有的价值已经存在......有什么东西缺失吗?感谢
答案 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)