首页 文章

JPA持久化类从不同的JAR扩展另一个类

提问于
浏览
1

希望有人可以帮助解决这个问题,因为我发现的所有答案似乎都不适合我 .

在我的myProj webapp下,我有以下内容

./WEB=INF/lib/myproj-user.jar containing this class

@Entity
@Table(name = "user_details")
@Data
@EqualsAndHashCode(callSuper=false)
public class UserDetails extends CommonObject {
    ...
}

.

./WEB=INF/lib/myproj-common.jar containing this class

@MappedSuperclass
public abstract class CommonObject implements Serializable {

    private static final long serialVersionUID = -980608025624315940L;

    @Getter @Setter
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    ...
}

我的application-context.xml有这个(application-context.xml有子XML,叫做hibernate-context和model-context.xml,但这些一直很好)

<bean id="commonAuto" class="com.myproj.common.model.CommonObject"/>
<bean id="userDetails" class="com.myproj.user.model.UserDetails"/>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="annotatedClasses">
        <list>
            <value>com.myproj.common.model.CommonObject</value>             
            <value>com.myproj.user.model.UserDetails</value>

但在启动时,我的日志中出现以下错误

严重:异常发送上下文初始化事件监听器类org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException的实例:错误创建名为“userService” beans :自动装配依赖注入失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:com.myproj.user.dao.UserDao com.myproj.user.servces.impl.UserServiceImpl.userDao;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'userAccountDao'的bean时出错:注入自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.hibernate.SessionFactory com.myproj.user.dao.impl.UserDaoImpl.sessionFactory;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建在ServletContext资源[/WEB-INF/context/hibernate-context.xml]中定义名称为'sessionFactory'的bean时出错:init方法的调用失败;嵌套异常是org.hibernate.AnnotationException:在org.springframework的org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)中没有为实体指定标识符:com.myproj.user.model.UserDetails . beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1120)位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) . org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:295)中的createBean(AbstractAutowireCapableBeanFactory.java:461)org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) )org.springframework.beans.factory.support.AbstractBeanFactory.doGetB ean(AbstractBeanFactory.java:292)org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)org.springframework.context.utext.ContextLoader.configureAndRefreshWebApplicationContext (ContextLoader.java:389)在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)在org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)在org.apache . catalina.core.StandardContext.listenerStart(StandardContext.java:4323)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.jav)一:4780)在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)在org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:785)在org.apache.catalina.core .ContainerBase.addChild(ContainerBase.java:763)在org.apache.catalina.core.StandardHost.addChild(StandardHost.java:557)在org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:987)在org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778)在org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:540)在org.apache.catalina.startup.HostConfig.start( HostConfig.java:1390)在org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:355)在org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)在org.apache.catalina .util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)位于org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:313)at atOrg.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:293)org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:996)org.apache.catalina.core.StandardHost.startInternal( StandardHost.java:771)org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:988)atg.apache.catalina .core.StandardEngine.startInternal(StandardEngine.java:275)位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)org.apache.catalina.core.StandardService.startInternal(StandardService.java:427) )org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)位于org.apache.catalina.util.LifecycleBase的org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:649) . 在sun.reflect.NativeMetho的sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)的org.apache.catalina.startup.Catalina.start(Catalina.java:585)开始(LifecycleBase.java:139)位于org.apache.catalina.startup.Bootstrap.start的java.lang.reflect.Method.invoke(未知来源)的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)的dAccessorImpl.invoke(未知来源)(Bootstrap.java: 288)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:415)引起:org.springframework.beans.factory.BeanCreationException:无法自动装配字段:com.myproj.user.dao.UserDao com . myproj.user.servces.impl.UserServiceImpl.userDao;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'userAccountDao'的bean时出错:注入自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.hibernate.SessionFactory com.myproj.user.dao.impl.UserDaoImpl.sessionFactory;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建在ServletContext资源[/WEB-INF/context/hibernate-context.xml]中定义名称为'sessionFactory'的bean时出错:init方法的调用失败;嵌套异常是org.hibernate.AnnotationException:没有为实体指定标识符:org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor上的com.myproj.user.model.UserDetails $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514)at org . springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)... 45更多引起:org.springframework .beans.factory.BeanCreationException:创建名为'userAccountDao'的bean时出错:注入自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.hibernate.SessionFactory com.myproj.user.dao.impl.UserDaoImpl.sessionFactory;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建在ServletContext资源[/WEB-INF/context/hibernate-context.xml]中定义名称为'sessionFactory'的bean时出错:init方法的调用失败;嵌套异常是org.hibernate.AnnotationException:在org.springframework的org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)中没有为实体指定标识符:com.myproj.user.model.UserDetails . beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1120)位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) . org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:295)中的createBean(AbstractAutowireCapableBeanFactory.java:461)org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) )org.springframework.beans.factory.support.AbstractBeanFactory.doGetB ean(AbstractBeanFactory.java:292)org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:891)在org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:834)位于org.springframework.beans.factory的org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:749) . annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486)... 47更多引起:org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.hibernate.SessionFactory com.myproj.user.dao .impl.UserDaoImpl.sessionFactory;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建在ServletContext资源[/WEB-INF/context/hibernate-context.xml]中定义名称为'sessionFactory'的bean时出错:init方法的调用失败;嵌套异常是org.hibernate.AnnotationException:没有为实体指定标识符:org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor上的com.myproj.user.model.UserDetails $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514)at org . springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)... 58更多引起:org.springframework .beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/context/hibernate-context.xml]中定义了名为'sessionFactory'的bean创建错误:init方法的调用失败;嵌套异常是org.hibernate.AnnotationException:没有为org.springframework上的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1486)中的实体:com.myproj.user.model.UserDetails指定标识符 . 在org.springframework.beans.factory.support.AbstractBeanFactory $ 1的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)上的beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) .getObject(AbstractBeanFactory.java:295)org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) )org.springframew上的org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) Ork.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:891)位于org.springframework.beans.factory.support的org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:834) . Org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor上的DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:749)$ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486)... 60更多引起:org.hibernate.AnnotationException:未指定标识符for org.hibernate上org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:224)中的org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:276)中的实体:com.myproj.user.model.UserDetails .cfg.AnnotationBinder.bindClass(AnnotationBinder.java:665)org.hibernate.cfg.Configuration $ MetadataSourceQueue.processAnnotatedClassesQueue(Confi gging.java:3431)org.hibernate.cfg.Configuration $ MetadataSourceQueue.processMetadata(Configuration.java:3385)org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1337)atg.hibernate.cfg.Configuration位于org.springframework的org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1778)org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:242)的.buildSessionFactory(Configuration.java:1727) . Orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:372)org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:357)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory . java:1545)atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483)... 70更多

1 回答

  • 1
    @MappedSuperclass
      public abstract class CommonObject implements Serializable {
          private Date createDate;
          public abstract Long getId() ;
          public abstract void setId(Long id);
    
          public Date getCreateDate() {
                return createDate;
          }
    
          public void setCreateDate(Date createDate) {
                this.createDate = createDate;
          } 
      }
    
    
    
       @Entity
       @Table
       public class UserDetails extends CommonObject {
    
            String name;
            int age;
    
             @GeneratedValue(strategy= GenerationType.AUTO)
             @Id
             private Long id;
             public String getName() {
                     return name;
             }
    
             public void setName(String name) {
                  this.name = name;
             }
    
             public int getAge() {
                   return age;
             }
    
             public void setAge(int age) {
                    this.age = age;
             }
    
             public Long getId() {
                     return id;
             }
    
             public void setId(Long id) {
                 this.id = id;
             }
       }
    

相关问题