2

我使用eclipselink-staticweave-maven-plugin 1.0.3在 EclipseLink-2.4.0 中成功执行了静态编织,但是当我还运行集成测试时。遍历系统中的所有层,它们会中断。在我创建的 startUp() 方法中,它创建了一个用户实体,它在测试数据库中提交。但是在我清除数据库状态的 tearDown() 方法中,同一 EntityManager 无法删除实体(已经编织)。

当实体没有被编织时,测试没有错误。你认为问题可能出在哪里?

这里的异常状态也是:

java.lang.AbstractMethodError: nl.innovity.youbank.core.entity.user.User._persistence_setCacheKey(Lorg/eclipse/persistence/internal/identitymaps/CacheKey;)V at org.eclipse.persistence.internal.descriptors.ObjectBuilder.updateCachedAttributes (ObjectBuilder.java:3790) 在 org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfWorkingCopyIntoOriginal(MergeManager.java:871) 在 org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfWorkingCopyIntoOriginal(MergeManager.java:687) 在org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:307) 在 org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.mergeChangesIntoParent(UnitOfWorkImpl.java:3260) 在 org.eclipse.persistence.internal。 session.RepeatableWriteUnitOfWork。org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:283) 的 mergeChangesIntoParent(RepeatableWriteUnitOfWork.java:369) org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1147)在 org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:84) 在 org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:63) 在 nl.innovity .youbank.core.dao.DBManager.reinitDB(DBManager.java:510) 在 nl.innovity.youbank.core.integration.IntegrationTest.tearDown(IntegrationTest.java:126) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)在 sun.reflect.NativeMethodAccessorImpl。invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod $1.runReflectiveCall(FrameworkMethod.java:44) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)在 org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37) 在 org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner .java:71) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner .java:191) 在 org.junit.runners.access$000(ParentRunner.java:42) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 在 org.junit.internal.runners。 statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35)在 org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:146) 在 org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97) 在 sun.reflect。NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method. java:597) at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103) at $Proxy0.invoke(Unknown Source) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider (SurefireStarter.java:145) 在 org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:87) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke (ProviderFactory.java:103) 在 $Proxy0.invoke(Unknown Source) 在 org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145) 在 org.apache.maven.surefire.booter.SurefireStarter。 runSuitesInProcess(SurefireStarter.java:87) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke (ProviderFactory.java:103) 在 $Proxy0.invoke(Unknown Source) 在 org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145) 在 org.apache.maven.surefire.booter.SurefireStarter。 runSuitesInProcess(SurefireStarter.java:87) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)103) 在 $Proxy0.invoke(Unknown Source) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java :87) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)103) 在 $Proxy0.invoke(Unknown Source) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java :87) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)

在此先感谢,西蒙

4

1 回答 1

4

Maven 静态编织的配置似乎存在问题 - 它使用的 EclipseLink 版本与您运行的 2.4 版本不同。查看您链接的文档,默认设置为使用 EclipseLink 2.3.2:我相信 EclipseLink 2.4 已更改为将 _persistence_setCacheKey 方法添加到编织中使用的 PersistenceEntity 中。如果您使用 EclipseLink 2.3.2 进行编织,则此方法将丢失。

您需要将依赖项列表更改为指向 EclipseLink 2.4 作为您所描述的链接到的文档(其中它指的是使用 2.3.2 以外的 2.3.X 版本)。

于 2012-11-15T21:25:38.543 回答