如何在春季样本宠物诊所中使用 JPA?

Posted

技术标签:

【中文标题】如何在春季样本宠物诊所中使用 JPA?【英文标题】:How to use JPA in spring sample petclinic? 【发布时间】:2010-08-15 13:40:12 【问题描述】:

我正在学习弹簧样本。在 petclinic 项目中,默认情况下它使用 jdbc。我把下面这行改成jpa,不能再运行了

/WEB-INF/spring/applicationContext-jpa.xml

这是错误信息:

Caused by: java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:spring-agent.jar
    at org.springframework.context.weaving.DefaultContextLoadTimeWeaver.setBeanClassLoader(DefaultContextLoadTimeWeaver.java:83)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1418)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1389)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
    ... 35 more

任何回应都会非常有帮助。

【问题讨论】:

【参考方案1】:

默认的 Tomcat 类加载器不支持 Load-Time Weaving 所需的类转换。你需要使用Spring提供的那个。

首先,将org.springframework.instrument-3.0.0.RELEASE.jar复制到你的tomcat安装的lib文件夹中

然后修改src/main/webapp/META-INF/context.xml并取消注释以下行:

<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>

或者您可以摆脱 LTW 并使用 Hibernate 作为 JPA 提供程序。请参阅下面的相关问题。

另见

Spring Load-time Weaving on Tomcat: Does It Really Work?

相关问题

How to run Spring 3.0 PetClinic in tomcat with Hibernate backed JPA

参考文献

3.12 Registering a LoadTimeWeaver 7.8.1 Using AspectJ to dependency inject domain objects with Spring 7.8.4 Load-time weaving with AspectJ in the Spring Framework

【讨论】:

以上是关于如何在春季样本宠物诊所中使用 JPA?的主要内容,如果未能解决你的问题,请参考以下文章

用于 HSQL 的宠物诊所 hibernate.dialect

使用啥事务管理器? (JPA,春季)

春季数据休息与春季数据jpa

使用 JPA 连接从父实体返回子实体

春季 JPA |在多对多关系中搜索

具有多个数据源的春季批处理junit。 spring data jpa无法将数据保存在内存数据库中