【发布时间】:2016-09-13 04:01:06
【问题描述】:
我有三包。在第一个包中,我有 persistence.xml。我有两个类:A和B。A扩展了B。A类是@Entity,B类是@MappedSuperclass。两个类都列在persistence.xml中。 2'dn 和 3'rd 包的包被导出。
如果 A 类和 B 类在同一个包中 - 一切正常。但是,当第二个捆绑包中的 A 类和 B 类是我得到的第三个捆绑包时:
WARNING: EMFProxy invocation on method createEntityManager failed: Exception: Exception [EclipseLink-30005] (Eclipse Persistence Services - 2.6.3.v20160428-59c81c5): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: org.eclipse.gemini.jpa.classloader.CompositeClassLoader@20c0a64d
Internal Exception: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.6.3.v20160428-59c81c5): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [myPersistenceUnit] failed.
Internal Exception: java.lang.NullPointerException
java.lang.NullPointerException: null
at org.eclipse.persistence.internal.jpa.weaving.TransformerFactory.createClassDetails(TransformerFactory.java:270)
at org.eclipse.persistence.internal.jpa.weaving.TransformerFactory.addClassDetailsForMappedSuperClasses(TransformerFactory.java:124)
at org.eclipse.persistence.internal.jpa.weaving.TransformerFactory.buildClassDetailsAndModifyProject(TransformerFactory.java:180)
at org.eclipse.persistence.internal.jpa.weaving.TransformerFactory.createTransformerAndModifyProject(TransformerFactory.java:84)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1972)
at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.callPredeploy(JPAInitializer.java:100)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:104)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:188)
at org.eclipse.gemini.jpa.ProviderWrapper.createEntityManagerFactory(ProviderWrapper.java:128)
at org.eclipse.gemini.jpa.proxy.EMFServiceProxyHandler.createEMF(EMFServiceProxyHandler.java:151)
at org.eclipse.gemini.jpa.proxy.EMFServiceProxyHandler.syncGetEMFAndSetIfAbsent(EMFServiceProxyHandler.java:127)
at org.eclipse.gemini.jpa.proxy.EMFServiceProxyHandler.invoke(EMFServiceProxyHandler.java:73)
at com.sun.proxy.$Proxy8.createEntityManager(Unknown Source)
当我在persistence.xml中设置时
<property name="eclipselink.weaving" value="false"/>
我没有遇到任何异常,但是 B 类的所有字段都被忽略了。如何解决这个问题?
【问题讨论】:
-
将 EclipseLink 日志记录设置为最好或全部,并在 EclipseLink 在部署期间加载每个类时检查日志,以查看是否所有类都被拾取。然后它应该显示任何可能阻止加载“B”的警告或错误。
-
@Chris 感谢您的宝贵时间。它没有帮助,但它给出了一个提示——我注意到其中一个包中的任何类都被忽略了,最后找到了原因。看我的回答。
-
@Chris 顺便说一句,有没有办法让一些 Maven 包来读取 persistence.xml 类并添加缺少的包来清单?还是其他好的解决方案?
标签: java jpa osgi eclipselink