Nic*_*ams 8 spring hibernate jpa hibernate-entitymanager load-time-weaving
我在Spring Framework应用程序中使用Hibernate作为JPA提供程序(我使用它EntityManagerFactory而不是它SessionFactory).我设法让Spring Framework的加载时间编织支持工作,所以我已经超越了这个障碍.
我需要在实体上启用延迟加载byte[]和@ManyToOne属性.我理解如何使用Hibernate的ant任务在构建时检测(编织)我的实体,但是我想在运行时检测我的实体(加载时间编织).我已经看到过几个谷歌搜索结果的引用,但没有启用它的实际说明.我需要设置什么属性来指示Hibernate它可以在运行时检测我的实体?
Nic*_*ams 25
经过大量阅读代码和调试后,我想出来了.令人遗憾的是,Hibernate ORM文档不包含此信息.(公平地说,Hibernate EntityManager文档确实如此,但它并不容易找到.关于"使用延迟属性获取"的Hibernate指令只说"Lazy属性加载需要构建时字节码检测."它没有提到你可以使用运行时检测使用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.
通过这些步骤,我现在在Tomcat中使用Hibernate的运行时实体字节码检测和Spring Framework.
| 归档时间: |
|
| 查看次数: |
7427 次 |
| 最近记录: |