为了在两个库之间导数据,借助一下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>
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>
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>
這個配置文件不對吧。
文件中的这行</composite-id>是没有的。
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 %%%%");输出了