Hibernate从* .hbm.xml和* .cfg.xml本地化到运行所有项目

时间:2016-11-12 10:52:14

标签: java hibernate configuration frameworks

我是hibernate编程的初学者,所以我正在尝试运行我的第一个项目hibernate,但它不能在每次运行时运行 这是代码项目

的捕获project exlorerthis is the complement project explorer

这是源代码:

Categorie.java

package dao;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

public class Categorie {

    private Long idCategorie;
    private String titre, description;
    private Date date;
    private Set<Produit> produits = new HashSet();
    public Categorie() {
        super();
    }

    public Categorie(String titre, String description, Date date) {
        super();
        this.titre = titre;
        this.description = description;
        this.date = date;
    }

    public Long getIdCategorie() {
        return idCategorie;
    }

    public void setIdCategorie(Long idCategorie) {
        this.idCategorie = idCategorie;
    }

    public String getTitre() {
        return titre;
    }

    public void setTitre(String titre) {
        this.titre = titre;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

}

Produit.java

package dao;

public class Produit {

    private Long idProduit;
    private String nom, description;
    private Double prix;

    public Produit() {
        super();
    }

    public Produit( String nom, String description, Double prix) {
        super();
        this.nom = nom;
        this.description = description;
        this.prix = prix;
    }

    public Long getIdProduit() {
        return idProduit;
    }

    public void setIdProduit(Long idProduit) {
        this.idProduit = idProduit;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Double getPrix() {
        return prix;
    }

    public void setPrix(Double prix) {
        this.prix = prix;
    }

}

Service.java

package dao;

import org.hibernate.Session;
import util.HibernateUtil;
public class Services {

    public void addProduit(Produit p){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.save(p);
        session.getTransaction().commit();
    }
}

test.java

package dao;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Services s =new Services();
        Produit p = new Produit("PC", "Sony viao", (double)7000);
        s.addProduit(p);
    }

}

HibernateUtil.java

package util;


import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtil {
    public static final SessionFactory sessionFactory;

    static {
        try {
            // Création de la SessionFactory à partir de hibernate.cfg.xml
            sessionFactory = new Configuration().configure("Hibernate.cfg.xml").buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

   // public static final ThreadLocal session = new ThreadLocal();

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

就在这里,它是java代码,从现在开始它就是XML:

Categorie.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

    <class name="dao.Categorie" table="CATEGORIE">
        <id name="idCategorie" column="ID_CATEGORIE">
            <generator class="native"></generator>
        </id>
        <nom name="titre" column="TITRE"></nom>
        <description name="description" column="DESCRIPTION"></description>
        <prix name="date" column="DATE"></prix>
        <set name="produit" table="CAT_PROD">
            <key column="ID_CATEGORIE" ></key>
            <many-to-many class="dao.Produit" column="ID_PRODUIT"></many-to-many>
        </set>
    </class>

</hibernate-mapping>

Produit.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

 <class name="dao.Produit" table="PRODUITS">
 <id name="idProduit" column="ID_PRODUIT">
 <generator class="native" ></generator>
 </id>
 <nom name="nom" column="NOM"></nom>
 <description name="description" column="DESCRIPTION"></description>
 <prix name="prix" column="PRIX"></prix>

 </class>

</hibernate-mapping>

的hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->

        <property name="hbm2ddl.auto">create</property>

        <mapping resource="dao/Categorie.hbm.xml" />
        <mapping resource="dao/Produit.hbm.xml" />

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

这是来自控制台的错误

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Initial SessionFactory creation failed.org.hibernate.MappingException: Could not read mappings from resource: dao/Categorie.hbm.xml
Exception in thread "main" java.lang.ExceptionInInitializerError
    at util.HibernateUtil.<clinit>(HibernateUtil.java:17)
    at dao.Services.addProduit(Services.java:8)
    at dao.Test.main(Test.java:9)
Caused by: org.hibernate.MappingException: Could not read mappings from resource: dao/Categorie.hbm.xml
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:484)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1443)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1411)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1392)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1368)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1288)
    at util.HibernateUtil.<clinit>(HibernateUtil.java:13)
    ... 2 more
Caused by: org.hibernate.MappingException: invalid mapping
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:424)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:481)
    ... 8 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 36; Le type d'élément "nom" doit être déclaré.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.dom4j.io.SAXReader.read(SAXReader.java:465)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:421)
    ... 9 more

所以请帮我清楚地向我展示 一步一步  并且 非常感谢

1 个答案:

答案 0 :(得分:0)

<nom name="文件中的hbm.xml问题需要替换为<property name=",请参阅here以获取示例hbm文件。