Spring Websphere:JPA:java.lang.IllegalArgumentException:Object:Entity不是已知的实体类型

Spring Websphere:JPA:java.lang.IllegalArgumentException:Object:Entity不是已知的实体类型,spring,jpa,websphere,Spring,Jpa,Websphere,我正试图在IBMWebSphere7.0.0.9上部署一个使用Eclipselink作为JPA层的应用程序。在尝试执行任何CRUD操作时,我遇到以下异常: Caused by: java.lang.IllegalArgumentException: Object: Entity is not a known entity type. at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForP

我正试图在IBMWebSphere7.0.0.9上部署一个使用Eclipselink作为JPA层的应用程序。在尝试执行任何CRUD操作时,我遇到以下异常:

Caused by: java.lang.IllegalArgumentException: Object: Entity is not a known entity type. at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4199) at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:380) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) at java.lang.reflect.Method.invoke(Method.java:600) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:358) at $Proxy93.persist(Unknown Source) ... 89 more 原因:java.lang.IllegalArgumentException:对象:实体不是已知的实体类型。 位于org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4199) 位于org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:380) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)中 位于java.lang.reflect.Method.invoke(Method.java:600) 位于org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:358) 位于$Proxy93.persist(未知来源) ... 89多 我看到的另一个堆栈跟踪是:

Caused by: java.lang.ClassCastException: Entity incompatible with Entity at o.u.d.dao.jpa.converter.impl.EntityBeanConvertorImpl.convertToModel(EntityBeanConvertorImpl.java:143) ... 223 more 原因:java.lang.ClassCastException:实体与实体不兼容 位于o.u.d.dao.jpa.converter.impl.EntityBeanConvertorImpl.convertToModel(EntityBeanConvertorImpl.java:143) ... 223多 My persistence.xml看起来像:

     <persistence-unit name="ds" transaction-type="JTA">   <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>      <jta-data-source>dsjta</jta-data-source>   <class>Entity</class>      <exclude-unlisted-classes>true</exclude-unlisted-classes>     <properties>    <property name="eclipselink.target-server" value="WebSphere_7" />    <property name="eclipselink.logging.level" value="OFF" />    <property name="eclipselink.ddl-generation" value="none" />    <property name="eclipselink.ddl-generation.output-mode" value="database" />    </properties>  </persistence-unit>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">    <property name="persistenceUnitName" value="ds"/>  <property name="dataSource" ref="dataSource"/>  <property name="jpaVendorAdapter">   <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">    <property name="showSql" value="false"/>    <property name="generateDdl" value="false"/>   </bean>  </property>  <property name="loadTimeWeaver">   <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>  </property>   </bean>
org.eclipse.persistence.jpa.PersistenceProvider dsjta实体true
我的应用程序上下文文件如下所示:

     <persistence-unit name="ds" transaction-type="JTA">   <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>      <jta-data-source>dsjta</jta-data-source>   <class>Entity</class>      <exclude-unlisted-classes>true</exclude-unlisted-classes>     <properties>    <property name="eclipselink.target-server" value="WebSphere_7" />    <property name="eclipselink.logging.level" value="OFF" />    <property name="eclipselink.ddl-generation" value="none" />    <property name="eclipselink.ddl-generation.output-mode" value="database" />    </properties>  </persistence-unit>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">    <property name="persistenceUnitName" value="ds"/>  <property name="dataSource" ref="dataSource"/>  <property name="jpaVendorAdapter">   <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">    <property name="showSql" value="false"/>    <property name="generateDdl" value="false"/>   </bean>  </property>  <property name="loadTimeWeaver">   <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>  </property>   </bean>


我们的VM是用指定的-javaagent参数启动的,并指向spring-agent.jar这些异常的原因是什么?

这里的问题是Websphere没有spring LoadTimeWeaver。当应用程序在使用InstrumentationLoadTimeWeaver类强制转换异常结果时,尝试将Web层应用程序与Spring管理的EM组合。EclipseLink支持在所有符合JPA2的容器中进行编织,但在本例中,Spring充当中介并干扰编织

在Spring为Websphere提供LoadTimeWeaver之前,您需要删除InstrumentationLoadTimeWeaver,并将EclipseLink persistence.xml属性“EclipseLink.weaving”设置为false或使用静态weaver