LazyToOne和Spring LoadTimeWeaver

时间:2016-12-13 16:00:41

标签: java spring hibernate spring-boot load-time-weaving

我有一个已知的问题,即使使用注释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

1 个答案:

答案 0 :(得分:1)

我发现了自己的错误。我忘了在application.properties中设置以下属性。

spring.jpa.properties.hibernate.ejb.use_class_enhancer=true

此属性启用hibernate中的字节码增强