使用hibernate 4.x版本的hbm.xml文件中的错误

问题描述:

我正在用hibernate-core jar-4.2.5.Final开发hibernate应用程序。使用hibernate 4.x版本的hbm.xml文件中的错误

这是实体:

public class Contact { 
    Long id; 
    String firstName; 
    String lastName; 
    String email; 

     //setters and getters 
} 

Contact.hbm.xml

<?xml version='1.0' encoding='utf-8' ?> 
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

    <hibernate-mapping package="org.sample.entity"> 
  <class name="com.sample.entity.Contact" table="CONTACT">   
     <id name="id" type="java.lang.Long"> 
      <column name="ID" /> 
      <generator class="increment" /> 
     </id> 
      <property name="firstName"><column name="FIRSTNAME" /></property> 
      <property name="lastName"><column name="LASTNAME"/></property> 
      <property name="email"><column name="EMAIL"/></property> 
 </class> 
</hibernate-mapping> 

RunContact.java

public class RunContact { 

    public static void main(String[] args) { 

     Session session = null; 

     try{ 
     //sessionfactory 
     Configuration configuration = new Configuration().configure(); 
     //SessionFactory factory = configuration.buildSessionFactory(); 
     ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); 
     SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); 

     //session open 
     session = sessionFactory.openSession(); 

     Contact contact = new Contact(); 
     contact.setFirstName("Venu Kumar"); 
     contact.setLastName("Indukuri"); 
     contact.setEmail("[email protected]"); 

     //save 
     session.save(contact); 

     }catch(Exception e){ 
      e.printStackTrace(); 
     }finally{ 
      //session close 
      session.flush(); 
      session.close(); 
     }   
    }  
} 

当我运行这个程序,我收到以下异常。

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*,fetch-profile*,resultset*,(query|sql-query)*)". 

任何帮助解决问题的赞赏。

看起来像DTD验证失败,但由于http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd(使用Notepad ++进行检查),您的XML文件有效。
所以,我认为这个问题是下一:

<hibernate-mapping package="org.sample.entity"> 
    <class name="Contact" table="CONTACT"> 

类名应该只包含简单的类名称,没有包装

+0

仍然给了同样的错误 – ikvenu2000

+0

@ ikvenu2000它是全'hbm.xml'文件在你的例子或它只是它的一部分?可能你有更多'hbm.xml'文件? – Ilya