簡體   English   中英

Spring和Hibernate:自動連接依賴項注入失敗

[英]Spring and Hibernate :Injection of autowired dependencies failed

我正在使用Spring和Hibernate在JAVAEE Project中工作,當我嘗試生成數據庫時,由於這個問題,我無法執行以下操作:

18:03:37,676 ERROR ContextLoader:331 -Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoAffectation': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.hibernate.SessionFactory ma.emsi.gestion.dao.DaoAffectationImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from resource ma/emsi/gestion/mapping/Seance.hbm.xml
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5003)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5517)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.hibernate.SessionFactory ma.emsi.gestion.dao.DaoAffectationImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from resource ma/emsi/gestion/mapping/Seance.hbm.xml
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
    ... 22 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from resource ma/emsi/gestion/mapping/Seance.hbm.xml
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
    ... 24 more
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from resource ma/emsi/gestion/mapping/Seance.hbm.xml
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:3762)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXmlQueue(Configuration.java:3751)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3739)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:343)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:431)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:416)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
    ... 34 more
Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping ma.emsi.gestion.model.Seance
    at org.hibernate.cfg.Configuration$MappingsImpl.addClass(Configuration.java:2835)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:178)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:3759)
    ... 44 more

這是Seance的映射:

<class name="ma.emsi.gestion.model.Seance" table="SEANCE">

    <id name="idSeance" type="int">
        <column name="ID_SEANCE" />
        <generator class="increment" />
    </id>


    <property name="dateDebut" type="date">
        <column name="DATEDEBUT" />
    </property>

    <property name="dateFin" type="date">
        <column name="DATEFIN" />
    </property>

    <property name="heureDebut" type="date">
        <column name="HeureDebut" />
    </property>
    <property name="heureFin" type="date">
        <column name="HEUREFIN" />
    </property>
    <property name="salle" type="string" length="5">
        <column name="SALLE" />
    </property>

    <many-to-one name="planing" class="ma.emsi.gestion.model.Planing">

        <column name="ID_PLANING" />
    </many-to-one>

    <many-to-one name="affectation" class="ma.emsi.gestion.model.Affectation">

        <column name="ID_AFFECTATION" />
    </many-to-one>
</class>

這是Affectation的映射:

<class name="ma.emsi.gestion.model.Affectation" table="AFFECTATION">
        <id name="idAffectation" type="int" column="ID_AFFECTATION">
            <generator class="increment"/>
        </id>

        <many-to-one name="matiere" class="ma.emsi.gestion.model.Matiere">
            <column name="ID_MATIERE" />
        </many-to-one>
        <many-to-one name="prof" class="ma.emsi.gestion.model.Prof">
            <column name="ID_PROF" />
        </many-to-one>

        <bag name="seances" cascade="all">
            <key column="ID_AFFECTATION" />
            <one-to-many class="ma.emsi.gestion.model.Seance" />
        </bag>


        <many-to-one name="classe" class="ma.emsi.gestion.model.Classe">
            <column name="ID_CLASSE" />
        </many-to-one>

    </class>

這是我的Seance和Affectation模型班:

public class Classe {

private String filiere;
private int groupe;
private int idClasse;
private int niveau;

private Collection<Module> modules;
private Collection<Planing> plannings;




public Classe() {
    super();
    // TODO Auto-generated constructor stub
}
public String getFiliere() {
    return filiere;
}
public void setFiliere(String filiere) {
    this.filiere = filiere;
}
public int getGroupe() {
    return groupe;
}
public void setGroupe(int groupe) {
    this.groupe = groupe;
}
public int getIdClasse() {
    return idClasse;
}
public void setIdClasse(int idClasse) {
    this.idClasse = idClasse;
}
public int getNiveau() {
    return niveau;
}
public void setNiveau(int niveau) {
    this.niveau = niveau;
}
public Collection<Module> getModules() {
    return modules;
}
public void setModules(Collection<Module> modules) {
    this.modules = modules;
}
public Collection<Planing> getPlannings() {
    return plannings;
}
public void setPlannings(Collection<Planing> planning) {
    this.plannings = planning;
}


/*****************************************/
public class Affectation {

    private int idAffectation;
    private Classe classe;
    private Matiere matiere;
    private Support support;
    private Prof prof;

    private Collection<Seance> seances;

    public Affectation() {
        super();

    }


    public int getIdAffectation() {
        return idAffectation;
    }

    public void setIdAffectation(int idAffectation) {
        this.idAffectation = idAffectation;
    }

    public Classe getClasse() {
        return classe;
    }

    public void setClasse(Classe classe) {
        this.classe = classe;
    }

    public Matiere getMatiere() {
        return matiere;
    }

    public void setMatiere(Matiere matiere) {
        this.matiere = matiere;
    }

    public Support getSupport() {
        return support;
    }

    public void setSupport(Support support) {
        this.support = support;
    }

    public Prof getProf() {
        return prof;
    }

    public void setProf(Prof prof) {
        this.prof = prof;
    }


    public Collection<Seance> getSeances() {
        return seances;
    }


    public void setSeances(Collection<Seance> seances) {
        this.seances = seances;
    }

}

最后是我的DAO實現:

@Repository("daoAffectation")
public class DaoAffectationImpl implements IdaoAffectation {

    @Autowired
    SessionFactory sessionFactory;

    @Override
    public void add(Affectation afectation) {

        sessionFactory.getCurrentSession().save(afectation);

    }

    @Override
    public void update(Affectation affectation) {
        // TODO Auto-generated method stub
        sessionFactory.getCurrentSession().update(affectation);
    }

    @Override
    public void delete(Affectation affectaion) {
        // TODO Auto-generated method stub
        sessionFactory.getCurrentSession().delete(affectaion);
    }

    @Override
    public Affectation getById(int idAffectation) {
        // TODO Auto-generated method stub
        return (Affectation)sessionFactory.getCurrentSession().load(Affectation.class, idAffectation);
    }

    @Override
    public List<Affectation> getAll() {

        return sessionFactory.getCurrentSession().createCriteria(Affectation.class).list();
    }

}

有人可以幫我嗎

編輯

Seance類模型:

public class Seance {

    private int idSeance;
    private Date dateDebut;
    private Date dateFin;
    private Date heureDebut;
    private Date heureFin;
    private String salle;
    private Planing planing;
    private Affectation affectation;


    public Seance() {
        super();
        // TODO Auto-generated constructor stub
    }



    public Date getDateDebut() {
        return dateDebut;
    }

    public void setDateDebut(Date dateDebut) {
        this.dateDebut = dateDebut;
    }

    public Date getDateFin() {
        return dateFin;
    }

    public void setDateFin(Date dateFin) {
        this.dateFin = dateFin;
    }

    public Date getHeureDebut() {
        return heureDebut;
    }

    public void setHeureDebut(Date heureDebut) {
        this.heureDebut = heureDebut;
    }

    public Date getHeureFin() {
        return heureFin;
    }

    public void setHeureFin(Date heureFin) {
        this.heureFin = heureFin;
    }

    public int getIdSeance() {
        return idSeance;
    }

    public void setIdSeance(int idSeance) {
        this.idSeance = idSeance;
    }

    public String getSalle() {
        return salle;
    }

    public void setSalle(String salle) {
        this.salle = salle;
    }

    public Planing getPlanning() {
        return planing;
    }

    public void setPlanning(Planing planning) {
        this.planing = planning;
    }



    public Affectation getAffectation() {
        return affectation;
    }



    public void setAffectation(Affectation affectation) {
        this.affectation = affectation;
    }
}

編輯2

休眠配置:

<hibernate-configuration>
    <session-factory>

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>

        <property name="hbm2ddl.auto">update</property>
        <mapping resource="ma/emsi/gestion/mapping/Etudiant.hbm.xml" />
        <mapping resource="ma/emsi/gestion/mapping/Classe.hbm.xml" />
        <mapping resource="ma/emsi/gestion/mapping/Matiere.hbm.xml" />
        <mapping resource="ma/emsi/gestion/mapping/Planing.hbm.xml" />
        <mapping resource="ma/emsi/gestion/mapping/Prof.hbm.xml" />
        <mapping resource="ma/emsi/gestion/mapping/Seance.hbm.xml" />
        <mapping resource="ma/emsi/gestion/mapping/Affectation.hbm.xml" />

    </session-factory>
</hibernate-configuration>

在您的stacktrace中,您Could not parse mapping document from resource ma/emsi/gestion/mapping/Seance.hbm.xml看起來好像找到了xml,但是它不包含預期的結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM