财产标签休眠懒惰属性允许属性懒惰地加载为每链路:http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-declaration-property在休眠
lazy(可选 - 默认为false):表明此属性 应当第一次访问实例变量时会被延迟取出。 它需要编译时字节码检测。
但是,当我试图设置为lazy =真为我的财产之一,它是不是在这个例子中懒洋洋地加载它:
Hibernate映射文件:
<hibernate-mapping package="org.hibernate.tutorial.domain">
<class name="Event" table="EVENTS" select-before-update="true">
<id name="id" column="EVENT_ID">
<generator class="native" />
</id>
<property name="date" type="timestamp" column="EVENT_DATE" />
<property name="title" lazy="true"/>
<set name="participants" table="PERSON_EVENT" inverse="true">
<key column="EVENT_ID" />
<many-to-many column="PERSON_ID" class="Person" />
</set>
</class>
</hibernate-mapping>
计划:
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event event = (Event) session.get(Event.class, 135L);
session.getTransaction().commit();
System.out.println(event);
HibernateUtil.getSessionFactory().close();
}
由休眠产生的查询:
Hibernate: select event0_.EVENT_ID as EVENT1_0_0_, event0_.EVENT_DATE as EVENT2_0_0_, event0_.title as title0_0_ from EVENTS event0_ where event0_.EVENT_ID=?
请帮助我理解这种情况下为什么懒惰不起作用?
Vlad,如果没有Maven,是否可以这样做? Maven在我们公司被禁止*:(我也尝试过使用'hibernate.enhance.enable'属性,但是没有结果 –
Hibernate也提供了一个Gradle插件,用于构建时间检测。但是,您也可以使用[runtime instrumentation以及](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/orm.html#orm-jpa-setup-lcemfb)。 –
这假设您使用EntityManager API而不是SessionFactory,是否正确?我在Hibernate代码中看到,使用属性在运行时也可能会发生检测,但代码仅在EntityManager工厂中引用 –