应用程序组件中创建父类,在项目中实体继承此父类,如果父类重包含引用型实体,则项目启动报错

我想在项目A中定义一个类似StandardEntity的父类C,并打包为应用程序组件,并在项目B中引用此组件,创建C的子类D,但是在实现过程中,发现项目B运行报错,提示D找不到C的字段,相关项目在下面的帖子中

更新:
发现是父类C中定义了 Group group这个字段导致报错

提问时如果有错误日志,最好能上传错误日志帮助我们定位问题。

这是我的报错日志和项目,之前的项目在引用帖子中也上传了

base.rar (423.8 KB)

16:37:05.360 ERROR c.h.c.c.s.AbstractWebAppContextLoader   - Error initializing application
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Deployment of PersistenceUnit [child] failed. Close all factories for this PersistenceUnit.
Internal Exception: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.IntegrityException
Descriptor Exceptions: 
---------------------------------------------------------

Exception [EclipseLink-60] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The method [_persistence_set_agency_vh] or [_persistence_get_agency_vh] is not defined in the object [com.company.child.entity.Child].
Internal Exception: java.lang.NoSuchMethodException: com.company.child.entity.Child._persistence_get_agency_vh()
Mapping: org.eclipse.persistence.mappings.ManyToOneMapping[agency]
Descriptor: RelationalDescriptor(com.company.child.entity.Child --> [DatabaseTable(CHILD_CHILD)])

Exception [EclipseLink-218] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: A NullPointerException would have occurred accessing a non-existent weaved _vh_ method [_persistence_get_agency_vh].  The class was not weaved properly - for EE deployments, check the module order in the application.xml deployment descriptor and verify that the module containing the persistence unit is ahead of any other module that uses it.

Runtime Exceptions: 
---------------------------------------------------------

	at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:446) ~[spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:378) ~[spring-tx-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at com.haulmont.cuba.core.sys.TransactionImpl.<init>(TransactionImpl.java:63) ~[cuba-core-7.1.1.jar:7.1.1]
	at com.haulmont.cuba.core.sys.TransactionsImpl.create(TransactionsImpl.java:55) ~[cuba-core-7.1.1.jar:7.1.1]
	at com.haulmont.cuba.core.sys.PersistenceImpl.createTransaction(PersistenceImpl.java:136) ~[cuba-core-7.1.1.jar:7.1.1]
	at com.haulmont.cuba.security.auth.AuthenticationManagerBean.login(AuthenticationManagerBean.java:114) ~[cuba-core-7.1.1.jar:7.1.1]
	at com.haulmont.cuba.security.auth.AnonymousSessionHolder.loginAnonymous(AnonymousSessionHolder.java:82) ~[cuba-core-7.1.1.jar:7.1.1]
	at com.haulmont.cuba.security.auth.AnonymousSessionHolder.initializeAnonymousSession(AnonymousSessionHolder.java:72) ~[cuba-core-7.1.1.jar:7.1.1]
	at com.haulmont.cuba.security.auth.AnonymousSessionHolder.applicationStarted(AnonymousSessionHolder.java:45) ~[cuba-core-7.1.1.jar:7.1.1]
	at com.haulmont.cuba.core.sys.AppContext.startContext(AppContext.java:239) ~[cuba-global-7.1.1.jar:7.1.1]
	at com.haulmont.cuba.core.sys.AppContext$Internals.startContext(AppContext.java:302) ~[cuba-global-7.1.1.jar:7.1.1]
	at com.haulmont.cuba.core.sys.AbstractWebAppContextLoader.contextInitialized(AbstractWebAppContextLoader.java:86) ~[cuba-global-7.1.1.jar:7.1.1]
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4682) [catalina.jar:9.0.19]
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5150) [catalina.jar:9.0.19]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.19]
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:713) [catalina.jar:9.0.19]
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690) [catalina.jar:9.0.19]
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695) [catalina.jar:9.0.19]
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1133) [catalina.jar:9.0.19]
	at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1867) [catalina.jar:9.0.19]
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [na:1.8.0_171]
	at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0_171]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.19]
	at java.util.concurrent.AbstractExecutorService.submit(Unknown Source) [na:1.8.0_171]
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1045) [catalina.jar:9.0.19]
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:429) [catalina.jar:9.0.19]
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576) [catalina.jar:9.0.19]
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309) [catalina.jar:9.0.19]
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) [catalina.jar:9.0.19]
	at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) [catalina.jar:9.0.19]
	at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366) [catalina.jar:9.0.19]
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:929) [catalina.jar:9.0.19]
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831) [catalina.jar:9.0.19]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.19]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1377) [catalina.jar:9.0.19]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1367) [catalina.jar:9.0.19]
	at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0_171]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.19]
	at java.util.concurrent.AbstractExecutorService.submit(Unknown Source) [na:1.8.0_171]
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:902) [catalina.jar:9.0.19]
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) [catalina.jar:9.0.19]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.19]
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:423) [catalina.jar:9.0.19]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.19]
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:932) [catalina.jar:9.0.19]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.19]
	at org.apache.catalina.startup.Catalina.start(Catalina.java:633) [catalina.jar:9.0.19]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_171]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_171]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_171]
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350) [bootstrap.jar:9.0.19]
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492) [bootstrap.jar:9.0.19]
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Deployment of PersistenceUnit [child] failed. Close all factories for this PersistenceUnit.
Internal Exception: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.IntegrityException
Descriptor Exceptions: 
---------------------------------------------------------

Exception [EclipseLink-60] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The method [_persistence_set_agency_vh] or [_persistence_get_agency_vh] is not defined in the object [com.company.child.entity.Child].
Internal Exception: java.lang.NoSuchMethodException: com.company.child.entity.Child._persistence_get_agency_vh()
Mapping: org.eclipse.persistence.mappings.ManyToOneMapping[agency]
Descriptor: RelationalDescriptor(com.company.child.entity.Child --> [DatabaseTable(CHILD_CHILD)])

Exception [EclipseLink-218] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: A NullPointerException would have occurred accessing a non-existent weaved _vh_ method [_persistence_get_agency_vh].  The class was not weaved properly - for EE deployments, check the module order in the application.xml deployment descriptor and verify that the module containing the persistence unit is ahead of any other module that uses it.

Runtime Exceptions: 
---------------------------------------------------------

	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.createDeployFailedPersistenceException(EntityManagerSetupImpl.java:906) ~[org.eclipse.persistence.jpa-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:846) ~[org.eclipse.persistence.jpa-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:219) ~[org.eclipse.persistence.jpa-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:327) ~[org.eclipse.persistence.jpa-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:350) ~[org.eclipse.persistence.jpa-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:313) ~[org.eclipse.persistence.jpa-2.7.3-6-cuba.jar:na]
	at org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:464) ~[spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:390) ~[spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	... 52 common frames omitted
Caused by: org.eclipse.persistence.exceptions.EntityManagerSetupException: 
Exception Description: Deployment of PersistenceUnit [child] failed. Close all factories for this PersistenceUnit.
Internal Exception: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.IntegrityException
Descriptor Exceptions: 
---------------------------------------------------------

Exception [EclipseLink-60] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The method [_persistence_set_agency_vh] or [_persistence_get_agency_vh] is not defined in the object [com.company.child.entity.Child].
Internal Exception: java.lang.NoSuchMethodException: com.company.child.entity.Child._persistence_get_agency_vh()
Mapping: org.eclipse.persistence.mappings.ManyToOneMapping[agency]
Descriptor: RelationalDescriptor(com.company.child.entity.Child --> [DatabaseTable(CHILD_CHILD)])

Exception [EclipseLink-218] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: A NullPointerException would have occurred accessing a non-existent weaved _vh_ method [_persistence_get_agency_vh].  The class was not weaved properly - for EE deployments, check the module order in the application.xml deployment descriptor and verify that the module containing the persistence unit is ahead of any other module that uses it.

Runtime Exceptions: 
---------------------------------------------------------

	at org.eclipse.persistence.exceptions.EntityManagerSetupException.deployFailed(EntityManagerSetupException.java:241) ~[org.eclipse.persistence.core-2.7.3-6-cuba.jar:na]
	... 60 common frames omitted
Caused by: org.eclipse.persistence.exceptions.IntegrityException: 
Descriptor Exceptions: 
---------------------------------------------------------

Exception [EclipseLink-60] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The method [_persistence_set_agency_vh] or [_persistence_get_agency_vh] is not defined in the object [com.company.child.entity.Child].
Internal Exception: java.lang.NoSuchMethodException: com.company.child.entity.Child._persistence_get_agency_vh()
Mapping: org.eclipse.persistence.mappings.ManyToOneMapping[agency]
Descriptor: RelationalDescriptor(com.company.child.entity.Child --> [DatabaseTable(CHILD_CHILD)])

Exception [EclipseLink-218] (Eclipse Persistence Services - 2.7.3.6-cuba): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: A NullPointerException would have occurred accessing a non-existent weaved _vh_ method [_persistence_get_agency_vh].  The class was not weaved properly - for EE deployments, check the module order in the application.xml deployment descriptor and verify that the module containing the persistence unit is ahead of any other module that uses it.

Runtime Exceptions: 
---------------------------------------------------------

	at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:768) ~[org.eclipse.persistence.core-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:704) ~[org.eclipse.persistence.core-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:635) ~[org.eclipse.persistence.core-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:874) ~[org.eclipse.persistence.core-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:831) ~[org.eclipse.persistence.core-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:258) ~[org.eclipse.persistence.jpa-2.7.3-6-cuba.jar:na]
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:767) ~[org.eclipse.persistence.jpa-2.7.3-6-cuba.jar:na]
	... 58 common frames omitted

不是很清楚你的 base 项目做了什么设置。我重新建了一个 base 项目,在 install 之后,用 child 引入。没有遇到这个问题。上传上来,你可以比对一下:base.zip (70.9 KB)

我参照StandardEntity在BaseEntity上添加了
@MappedSuperclass
@MetaClass(name = “base_BaseEntity”)
@UnavailableInSecurityConstraints
这三个注解

已解决问题,@MappedSuperclass需要在插件项目中创建后代实体