我在Spring
Framework应用程序中将Hibernate用作JPA提供程序(我使用其EntityManagerFactory
代替其SessionFactory
)。我设法让Spring
Framework的加载时间编织支持起作用,所以我克服了这个障碍。
我需要在实体上启用byte[]
和@ManyToOne
属性的延迟加载。我了解如何使用Hibernate的ant任务在 构建
时对我的实体进行检测(编织),但是我想改为在 运行时
(加载时编织)对我的实体进行检测。我已经在多个Google搜索结果中看到了对in的引用,但没有启用它的实际说明。我需要设置什么属性来指示Hibernate在运行时可以检测我的实体?
经过大量的代码阅读和调试,我弄清楚了。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结合使用。
问题内容: 我有一个当前可与Java 6一起使用并编译时间编织的项目。我们使用以下pom启用spring方面以及我们自己的方面: 我尝试了各种配置,但是不能使其与Java 7一起使用。如果有人可以共享工作的pom或导致它,那将是很好的。 问题答案: 升级到Aspectjtools的1.7.0版后,它可以正常工作。另外,您需要将版本参数传递给编译器(使用该参数会导致问题)。如果有人需要更多详细信息,
我参与了一个较老项目的审查任务。任务是将某些库更新到更新的版本。这个项目成功地使用了spring(4.3.14.Release),以及JDK 8下的AspectJ(1.9.0)和Tomcat8.0.20。现在spring将更新到最新版本(目前为5.3.3),Tomcat版本也将提升到最新版本(目前为9.0.37)。服务器应该在JDK11下运行。升级库后,我们意识到AspectJ不再工作了。所以我开
每当打开Hibernate会话时,我都想使用AsheJ添加一个过滤器。我创建了一个方面并为我自己的类测试了它,它起作用了,但是对于Hibernate会话它什么也不做。 我创建了一个META-INF/aop。资源中的xml: 当我开始我的程序时,我得到以下异常: 我遵循了这些教程: 教程1教程2 我发现我必须按照异常的指示传递JVM参数,所以我尝试在构建梯度中执行以下操作: 根据IntelliJ,a
但还是毫无头绪。