为了在两个库之间导数据,借助一下Hibernate,在配置一个单向多对多关系的时候,报了两个错误
org.hibernate.MappingException: invalid configuration
Caused by: org.xml.sax.SAXParseException: The content of element type "mapping" must match "EMPTY".
令我十分困惑
Packages类
public class Packages implements java.io.Serializable {
private BigDecimal packageid;
private String packagename;
private String packagetype;
private BigDecimal formworkId;
private String ratetype;
private Set services=new HashSet();
}
Service类
public class Service implements java.io.Serializable {
private BigDecimal servicecode;
private String servicename;
private String servicetype;
private Set packages=new HashSet();
}
相应的get、set方法以及构造方法都是全的,为了节省空间就不帖出来了
Packages.hbm.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="db.merge.temp.Packages" table="PACKAGES" schema="RCMS2">
        <id name="packageid" type="java.math.BigDecimal">
            <column name="PACKAGEID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="packagename" type="java.lang.String">
            <column name="PACKAGENAME" length="50" not-null="true" />
        </property>
        <property name="packagetype" type="java.lang.String">
            <column name="PACKAGETYPE" length="1" />
        </property>
        <property name="formworkId" type="java.math.BigDecimal">
            <column name="FORMWORK_ID" precision="22" scale="0" />
        </property>
        <property name="ratetype" type="java.lang.String">
            <column name="RATETYPE" length="4" not-null="true" />
        </property>
        <set name="services" table="PACKAGE_SERVICE" inverse="true" cascade="save-update">
         <key column="packageid"/>
         <many-to-many column="servicecode" class="db.merge.temp.Service"/>
        </set>
    </class>
</hibernate-mapping>PackageService类
public class PackageService implements java.io.Serializable {
private BigDecimal packageid;
private String servicecode;
}
PackageService.hbm.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="db.merge.temp.PackageService" table="PACKAGE_SERVICE" schema="RCMS2">
            <key-property name="packageid" type="java.math.BigDecimal">
                <column name="PACKAGEID" precision="22" scale="0" />
            </key-property>
            <key-property name="servicecode" type="java.lang.String">
                <column name="SERVICECODE" length="20" />
            </key-property>
        </composite-id>
    </class>
</hibernate-mapping>

解决方案 »

  1.   

    Caused by: org.xml.sax.SAXParseException: The content of element type "mapping" must match "EMPTY". 这个字段有问题
      

  2.   

    没太明白你的话,哪个字段mapping?  empty?? 我的程序里的字段在这句话里没有显示啊,请你详细说一下。谢谢!
      

  3.   

    <!--  
      Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
      <class name="db.merge.temp.PackageService" table="PACKAGE_SERVICE" schema="RCMS2">
      <key-property name="packageid" type="java.math.BigDecimal">
      <column name="PACKAGEID" precision="22" scale="0" />
      </key-property>
      <key-property name="servicecode" type="java.lang.String">
      <column name="SERVICECODE" length="20" />
      </key-property>
      </composite-id>
      </class>
    </hibernate-mapping>
    這個配置文件不對吧。
      

  4.   


    文件中的这行</composite-id>是没有的。
      

  5.   

    public class HibernateSessionFactory {    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
        private  static Configuration configuration = new Configuration();    
        private static org.hibernate.SessionFactory sessionFactory;
        private static String configFile = CONFIG_FILE_LOCATION; static {
         try {
    configuration.configure(configFile);
    sessionFactory = configuration.buildSessionFactory();
    } catch (Exception e) {
    System.err.println("%%%% Error Creating SessionFactory %%%%");
    e.printStackTrace();
    }
        }
    }
    这里的异常被捕获了,System.err.println("%%%% Error Creating SessionFactory %%%%");输出了