【问题标题】:Websphere: JPA: java.lang.IllegalArgumentException: Object: Entity is not a known entity typeWebsphere:JPA:java.lang.IllegalArgumentException:对象:实体不是已知的实体类型
【发布时间】:2011-03-12 16:37:41
【问题描述】:

我正在尝试使用 Eclipselink 作为我在 IBM Websphere 7.0.0.9 上的 JPA 层来部署应用程序。在尝试执行任何 CRUD 操作时,我得到以下异常:

引起: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(Native Method) 在 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 更多

我看到的另一个堆栈跟踪是:

引起:java.lang.ClassCastException: Entity incompatible with Entity 在 o.u.d.dao.jpa.converter.impl.EntityBeanConvertorImpl.convertToModel(EntityBeanConvertorImpl.java:143) ... 223 更多

我的 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>

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

【问题讨论】:

    标签: spring jpa websphere


    【解决方案1】:

    这里的问题是 Websphere 没有 Spring LoadTimeWeaver。当您的应用程序尝试将 Web-Tier 应用程序与 Spring 托管的 EM 组合时,同时使用 InstrumentationLoadTimeWeaver 类转换异常结果。 EclipseLink 支持在所有符合 JPA 2 的容器中进行编织,但在这种情况下,Spring 充当中介并干扰编织。

    直到 Spring 有 Websphere 的 LoadTimeWeaver 您需要删除 InstrumentationLoadTimeWeaver 并将 EclipseLink persistence.xml 属性“eclipselink.weaving”设置为 false 或使用静态编织器。

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      相关资源
      最近更新 更多