经过大量的代码阅读和调试,我弄清楚了。Hibernate ORM文档不包含此信息真是可惜。(公平地讲,Hibernate
EntityManager文档可以,但是并不容易找到。有关“使用惰性属性获取”的Hibernate指令只说:“惰性属性加载需要构建时字节码检测。”
没有 提及您可以使用 运行时 检测。带有Hibernate EntityManager属性。)
您必须做的第一件事是将
"hibernate.ejb.use_class_enhancer"JPA属性设置为
"true"(
String)。这告诉Hibernate,它可以通过调用使用“应用程序服务器”一类变换
addTransformer的
PersistenceUnitInfo实例。“应用服务器”类的转换实际上是Spring的
LoadTimeWeaver。如果您使用Spring的Java配置和
LocalContainerEntityManagerFactoryBean,并且Hibernate是编译时依赖项,则可以使用
AvailableSettings.USE_CLASS_ENHANCER常量而不是字符串字面量
"hibernate.ejb.use_class_enhancer"(这将使其具有抗错字性)。
如果您使用的是Spring的Java配置,则必须执行其他步骤,直到修复SPR-10856。不会自动调用
LocalContainerEntityManagerFactoryBean的
setLoadTimeWeaver方法,因此您必须手动调用它。在您的
@Configuration课程中,只需创建实例
@Inject或实例,然后在创建时手动调用。
@Autowire``LoadTimeWeaver``setLoadTimeWeaver``LocalContainerEntityManagerFactoryBean
完成这些步骤后,我现在将Hibernate的运行时实体字节码检测与Tomcat中的Spring framework结合使用。



