我有一个已知的问题,即使使用注释fetchtype.lazy(例如这里描述:http://justonjava.blogspot.de/2010/09/lazy-one-to-one-and-one-to-many.html),Hibernate也会加载数据。
所以我在我的属性中添加了注释@LazyToOne(LazyToOneOption.NO_PROXY)
,并使用spring loadtimeweaver启用了字节码Instrumentation。
但是hibernate仍然热切地加载我的属性。
我已经通过编织自己的代码来测试loadtimeweaver并且它可以工作。有谁知道我错过了什么。
以下描述了我的代码的结构。
我的实体有双向关系,例如:
@Entity
public class ParentEntity {
@OneToOne(fetch = FetchType.LAZY)
@LazyToOne(LazyToOneOption.NO_PROXY)
private ChildEntityONE childentityOne;
@OneToOne(fetch = FetchType.LAZY)
@LazyToOne(LazyToOneOption.NO_PROXY)
private ChildEntityTWO childentityTwo;
}
和
@Entity
public class ChildEntityONE {
@OneToOne(fetch = FetchType.LAZY)
@LazyToOne(LazyToOneOption.NO_PROXY)
private ParentEntity parentEntity ;
}
@Entity
public class ChildEntityTWO {
@OneToOne(fetch = FetchType.LAZY)
@LazyToOne(LazyToOneOption.NO_PROXY)
private ParentEntity parentEntity ;
}
我在我的Application类loadTimeWeaving中启用了:
@EnableLoadTimeWeaving(aspectjWeaving=EnableLoadTimeWeaving.AspectJWeaving.ENABLED)
public class Application {
...
}
使用过的框架的版本:
春季4.2.3
弹簧靴1.3.2
Hibernate 4.3.11.Final
答案 0 :(得分:1)
我发现了自己的错误。我忘了在application.properties中设置以下属性。
spring.jpa.properties.hibernate.ejb.use_class_enhancer=true
此属性启用hibernate中的字节码增强