首页 > 解决方案 > Hibernate映射多对一单向通过xml,只有一个方向

问题描述

我正在学习如何在休眠中使用 xml 进行映射。
我有表 IndexProduct,它有很多行指向一个产品。

表“索引产品”:

<hibernate-mapping>
    <class name="path.to.model.IndexProduct" table="IndexProduct">    
        <meta attribute = "class-description">
            This class contains the sesion detail. 
        </meta>        
        <id name="id" type="java.lang.Long" column="id">
            <generator class="native"/>
        </id>        

        <join table="Product" optional="true">
            <key column="id" unique="true"/>
            <many-to-one name="Product" class="path.to.model.Product" 
            column="idProduct" not-null="true" />  
        </join>

        <property name="year" type="java.lang.Integer">
            <column name="year"/>
        </property>    
        <property name="Index" type="java.lang.Float">
            <column name="Index"/>
        </property>       

    </class>
</hibernate-mapping>

表“产品”:

<hibernate-mapping>
    <class name="path.to.model.Product" table="Product">    
        <meta attribute = "class-description">
            This class contains the sesion detail. 
        </meta>        
        <id name="id" type="java.lang.Long" column="id">
            <generator class="native"/>
        </id>      
        <property name="nameProduct" type="java.lang.String">
            <column name="nameProduct"/>
        </property>            
    </class>
</hibernate-mapping>

当我尝试使用此代码获取数据时:

    Session ss = factory.openSession();
    try {
        Transaction tx = ss.beginTransaction();

        Object result = ss.get(IndexProduct.class, id);

        tx.commit();
        return new JSONObject().put("data", result);
    } catch (Exception ex) {           
         return new JSONObject().put("data", ex.getMessage());
    } finally {
        if (ss!= null) {
            ss.close();
        }
    }

Hibernate 不会在结果中返回带有产品的数据。它不会自动获取数据。这是错误:

caused by: org.xml.sax.SAXParseException; lineNumber: 32; 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:842)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
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.cfg.Configuration.addInputStream(Configuration.java:505)
... 29 more

这是我的偏好链接:https ://docs.jboss.org/hibernate/core/3.3/reference/en/html/associations.html (搜索 7.3.2。多对一)。我不知道为什么。我想要这样的东西:

IndexProduct:{
  id:1,
  product:{
    id:10,
    name:"car",
  }

}

标签: javahibernate

解决方案


推荐阅读