采用的Hibernate中一个表对多个类(Table per class hierarchy)的继承机制。父类为Staff,子类为Student和Teacher,一张表为Staff。我写的配置文件为:
<class name="edu.si.db.Staff" table="staff" catalog="ow_tss">
<id name="id" type="java.lang.Integer">
<column name="Id" />
<generator class="identity" />
</id>
<many-to-one name="classInfo" class="edu.si.db.ClassInfo" fetch="select">
<column name="classInfo" />
</many-to-one>
<property name="accoutId" type="java.lang.String">
<column name="accoutID" length="25" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="150" not-null="true" />
</property>
<property name="name" type="java.lang.String">
<column name="name" length="20" />
</property>
<property name="idcardNo" type="java.lang.String">
<column name="IDCardNo" length="20" />
</property>
<property name="gender" type="java.lang.Integer">
<column name="gender" />
</property>
<property name="birthdate" type="java.util.Date">
<column name="birthdate" length="10" />
</property>
<property name="phoneNo" type="java.lang.String">
<column name="phoneNo" length="20" />
</property>
<property name="cellphoneNo" type="java.lang.String">
<column name="cellphoneNo" length="20" />
</property>
<property name="emailAddress" type="java.lang.String">
<column name="emailAddress" length="50" />
</property>
<property name="msn" type="java.lang.String">
<column name="MSN" length="50" />
</property>
<property name="qq" type="java.lang.String">
<column name="QQ" length="30" />
</property>
<property name="workAddress" type="java.lang.String">
<column name="workAddress" length="100" />
</property>
<property name="zipCode" type="java.lang.String">
<column name="zipCode" length="15" />
</property>
<property name="postAddress" type="java.lang.String">
<column name="postAddress" length="100" />
</property>
<property name="webSite" type="java.lang.String">
<column name="webSite" length="100" />
</property>
<property name="description" type="java.lang.String">
<column name="description" />
</property>
<discriminator type="java.lang.String">
<column name="type" length="10" />
</discriminator>
<subclass name="edu.si.db.Student" discriminator-value="student">
<property name="studentId" type="java.lang.String">
<column name="studentID" length="10" unique="true" />
</property>
<property name="major" type="java.lang.String">
<column name="major" length="20" />
</property>
<property name="attendYear" type="java.util.Date">
<column name="attendYear" length="0" />
</property>
<property name="" type="java.lang.Integer">
<column name="">
<comment>学分</comment>
</column>
</property>
<property name="educationMode" type="java.lang.Integer">
<column name="educationMode" />
</property>
<property name="state" type="java.lang.String">
<column name="state" length="10" />
</property>
</subclass> <subclass name="edu.si.db.Teacher" discriminator-value="teacher">
<property name="degree" type="java.lang.String">
<column name="degree">
<comment>职称(教授、讲师、副教授等)</comment>
</column>
</property>
<property name="office" type="java.lang.String">
<column name="office" length="15">
<comment>职位(院长、教务员等)</comment>
</column>
</property>
</subclass> </class>myclipse总是报错说class的content不匹配,不知道怎么回事?请教诸位大牛。
<class name="edu.si.db.Staff" table="staff" catalog="ow_tss">
<id name="id" type="java.lang.Integer">
<column name="Id" />
<generator class="identity" />
</id>
<many-to-one name="classInfo" class="edu.si.db.ClassInfo" fetch="select">
<column name="classInfo" />
</many-to-one>
<property name="accoutId" type="java.lang.String">
<column name="accoutID" length="25" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="150" not-null="true" />
</property>
<property name="name" type="java.lang.String">
<column name="name" length="20" />
</property>
<property name="idcardNo" type="java.lang.String">
<column name="IDCardNo" length="20" />
</property>
<property name="gender" type="java.lang.Integer">
<column name="gender" />
</property>
<property name="birthdate" type="java.util.Date">
<column name="birthdate" length="10" />
</property>
<property name="phoneNo" type="java.lang.String">
<column name="phoneNo" length="20" />
</property>
<property name="cellphoneNo" type="java.lang.String">
<column name="cellphoneNo" length="20" />
</property>
<property name="emailAddress" type="java.lang.String">
<column name="emailAddress" length="50" />
</property>
<property name="msn" type="java.lang.String">
<column name="MSN" length="50" />
</property>
<property name="qq" type="java.lang.String">
<column name="QQ" length="30" />
</property>
<property name="workAddress" type="java.lang.String">
<column name="workAddress" length="100" />
</property>
<property name="zipCode" type="java.lang.String">
<column name="zipCode" length="15" />
</property>
<property name="postAddress" type="java.lang.String">
<column name="postAddress" length="100" />
</property>
<property name="webSite" type="java.lang.String">
<column name="webSite" length="100" />
</property>
<property name="description" type="java.lang.String">
<column name="description" />
</property>
<discriminator type="java.lang.String">
<column name="type" length="10" />
</discriminator>
<subclass name="edu.si.db.Student" discriminator-value="student">
<property name="studentId" type="java.lang.String">
<column name="studentID" length="10" unique="true" />
</property>
<property name="major" type="java.lang.String">
<column name="major" length="20" />
</property>
<property name="attendYear" type="java.util.Date">
<column name="attendYear" length="0" />
</property>
<property name="" type="java.lang.Integer">
<column name="">
<comment>学分</comment>
</column>
</property>
<property name="educationMode" type="java.lang.Integer">
<column name="educationMode" />
</property>
<property name="state" type="java.lang.String">
<column name="state" length="10" />
</property>
</subclass> <subclass name="edu.si.db.Teacher" discriminator-value="teacher">
<property name="degree" type="java.lang.String">
<column name="degree">
<comment>职称(教授、讲师、副教授等)</comment>
</column>
</property>
<property name="office" type="java.lang.String">
<column name="office" length="15">
<comment>职位(院长、教务员等)</comment>
</column>
</property>
</subclass> </class>myclipse总是报错说class的content不匹配,不知道怎么回事?请教诸位大牛。
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 file C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ow_tss\WEB-INF\classes\edu\si\db\Staff.hbm.xml
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1336)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:402)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:316)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:282)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:126)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from file C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ow_tss\WEB-INF\classes\edu\si\db\Staff.hbm.xml
at org.hibernate.cfg.Configuration.addFile(Configuration.java:307)
at org.hibernate.cfg.Configuration.addDirectory(Configuration.java:662)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:666)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1367)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1333)
... 43 more
Caused by: org.xml.sax.SAXParseException: The content of element type "class" must match "(meta*,subselect?,cache?,synchronize*,comment?,tuplizer*,(id|composite-id),discriminator?,natural-id?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,((join*,subclass*)|joined-subclass*|union-subclass*),loader?,sql-insert?,sql-update?,sql-delete?,filter*,resultset*,(query|sql-query)*)".
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:264)
at org.hibernate.cfg.Configuration.addFile(Configuration.java:305)
... 48 more
2009-4-2 21:26:39 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet /ow_tss threw load() exception
org.xml.sax.SAXParseException: The content of element type "class" must match "(meta*,subselect?,cache?,synchronize*,comment?,tuplizer*,(id|composite-id),discriminator?,natural-id?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,((join*,subclass*)|joined-subclass*|union-subclass*),loader?,sql-insert?,sql-update?,sql-delete?,filter*,resultset*,(query|sql-query)*)".
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:264)
at org.hibernate.cfg.Configuration.addFile(Configuration.java:305)
at org.hibernate.cfg.Configuration.addDirectory(Configuration.java:662)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:666)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1367)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1333)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:402)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:316)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:282)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:126)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
我知道哪儿错了。
discriminator的位置放错了。
<class name="edu.si.db.Staff" table="staff" catalog="ow_tss">
<id name="id" type="java.lang.Integer">
<column name="Id" />
<generator class="identity" />
</id>
<discriminator type="java.lang.String">
<column name="type" length="10" />
</discriminator>
<many-to-one name="classInfo" class="edu.si.db.ClassInfo" fetch="select">
<column name="classInfo" />
</many-to-one>
<property name="accoutId" type="java.lang.String">
<column name="accoutID" length="25" not-null="true" />
</property>
.......
就行了