1

Lorsque vous utilisez les deux attributs la version et horodatage dans le fichier hibernate.hbm.xml et d'exécuter le programme, je reçois une exception. Si l'attribut version est supprimé, le programme fonctionne correctement, mais en utilisant les deux, j'obtiens une erreur d'exécution.utilisant à la fois la version et l'horodatage je reçois un SAXParseException


fichier hibernate.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="Product.Product" table="Product"> 
    <id name="productId" column="pId"> 
     <generator class="assigned"/> 
    </id> 
    <timestamp name="ts" column="dateTime" /> 
    <version name="v" column="version"/> 
    <property name="productName" column="pName" length="50"/> 
    <property name="productPrice" column="pPrice" /> 
</class> 
</hibernate-mapping> 

HibernateUtil classe

public class HibernateUtil { 

public static void main(String[] args) { 
    Configuration c = new Configuration(); 
    c.configure("hibernate.cfg.xml"); 
    SessionFactory factory = c.buildSessionFactory(); 
    Session session = factory.openSession(); 
    Product p = new Product(); 
    p.setProductId(1001); 
    p.setProductName("Sony"); 
    p.setProductPrice(2000); 
    Transaction tx = session.beginTransaction(); 
    session.save(p); 
    tx.commit(); 
    System.out.println("Object is create Success fully..."); 
    session.close(); 
    factory.close(); 
} 

}


Erreur

Exception in thread "main" org.hibernate.InvalidMappingException: Unable to read XML 
at org.hibernate.internal.util.xml.MappingReader.legacyReadMappingDocument(MappingReader.java:375) 
at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:304) 
at org.hibernate.cfg.Configuration.add(Configuration.java:516) 
at org.hibernate.cfg.Configuration.add(Configuration.java:512) 
at org.hibernate.cfg.Configuration.add(Configuration.java:686) 
at org.hibernate.cfg.Configuration.addResource(Configuration.java:769) 
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2255) 
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2227) 
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2207) 
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2160) 
at org.hibernate.cfg.Configuration.configure(Configuration.java:2075) 
at Product.HibernateUtil.main(HibernateUtil.java:23) 

Caused by: org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 13; 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)*)". 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) 
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396) 
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) 
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284) 
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:1994) 
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:879) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2967) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602) 
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) 
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643) 
at org.dom4j.io.SAXReader.read(SAXReader.java:465) 
at org.hibernate.internal.util.xml.MappingReader.legacyReadMappingDocument(MappingReader.java:325) 

Répondre

2

Comme vous le dites, vous utilisez à la fois version et timestamp,

Dans la ligne d'erreur, vous pouvez voir (version|timestamp)? ce qui signifie que les deux d'entre eux sont exclusifs. Je suis désolé de vous dire que vous ne pouvez en utiliser qu'un à la fois à l'intérieur de votre <class>.

Vous pouvez lire dans le Hibernate documentation:

Hibernate fournit deux mécanismes différents pour stocker des informations versioning, un numéro de version dédiée ou un horodatage.

Les deux d'entre eux sont utilisés pour fournir un mécanisme de version, il suffit de choisir lequel utiliser, vous)

+0

Merci IG Pascual Sir .. –

+0

@ AK.Sharma était pas tout utile plus? –