繁体   English   中英

休眠-如何为Java类正确生成.hbn.xml映射文件,该类对应于具有复合主键的表?

[英]hibernate - how to properly generate .hbn.xml mapping files for a java class, which corresponds to a table with a composite primary key?

在我的PostgreSQL ERP数据库中,我有一个表“ Custtable”,它具有一个复合主键,由以下字段构成:

accountnum (String)
partition (Long)
dataareaid (String)

据我了解,由于这个复合键,我必须实现一个分离POJO,它将用作我的“ Custtable”休眠类的ID字段:

public class CusttableId {

    private String accountnum;
    private Long partition;
    private String dataareaid;

    public CusttableId(){

    }

    public String getAccountnum(){
        return accountnum;
    }

    public void setAccountnum( String an ) {
           accountnum = an;
        }

    public Long getPartition(){
        return partition;
    }

    public void setPartition(Long part){
        partition = part;
    }

然后,我可以在主类中使用此ID类:

@Entity
public class Custtable implements java.io.Serializable {

    @Id
    private CusttableId custTableId;

完成此操作后,当我使用Eclipse Hibernate Tools菜单为主类生成.hbn.xml映射文件时,将获得以下映射:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Sep 7, 2016 10:15:45 AM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.myproject.Custtable" table="CUSTTABLE">
        <id name="orgid" type="java.lang.String">
            <column name="ORGID" />
            <generator class="assigned" />
        </id>
        <many-to-one name="custTableId" class="com.uptake.symphony.data.CusttableId" access="field" fetch="join">
            <column name="CUSTTABLEID" />
        </many-to-one>
        <property name="invoiceaccount" type="java.lang.String">
            <column name="INVOICEACCOUNT" />
        </property>
        <property name="custgroup" type="java.lang.String">
            <column name="CUSTGROUP" />
        </property>
        <property name="linedisc" type="java.lang.String">
            <column name="LINEDISC" />
        </property>
        <property name="paymtermid" type="java.lang.String">
            <column name="PAYMTERMID" />
        </property>
        <property name="cashdisc" type="java.lang.String">
            <column name="CASHDISC" />
        </property>
        <property name="currency" type="java.lang.String">
            <column name="CURRENCY" />
        </property>
        <property name="intercompanyautocreateorders" type="int">
            <column name="INTERCOMPANYAUTOCREATEORDERS" />
        </property>
        <property name="salesgroup" type="java.lang.String">
            <column name="SALESGROUP" />
        </property>
        <property name="blocked" type="int">
            <column name="BLOCKED" />
        </property>
        <property name="onetimecustomer" type="int">
            <column name="ONETIMECUSTOMER" />
        </property>
        <property name="accountstatement" type="int">
            <column name="ACCOUNTSTATEMENT" />
        </property>
        <property name="creditmax" type="java.math.BigDecimal">
            <column name="CREDITMAX" />
        </property>
        <property name="mandatorycreditlimit" type="int">
            <column name="MANDATORYCREDITLIMIT" />
        </property>
        <property name="vendaccount" type="java.lang.String">
            <column name="VENDACCOUNT" />
        </property>
        <property name="pricegroup" type="java.lang.String">
            <column name="PRICEGROUP" />
        </property>
        <property name="multilinedisc" type="java.lang.String">
            <column name="MULTILINEDISC" />
        </property>
        <property name="enddisc" type="java.lang.String">
            <column name="ENDDISC" />
        </property>
        <property name="vatnum" type="java.lang.String">
            <column name="VATNUM" />
        </property>
        <property name="inventlocation" type="java.lang.String">
            <column name="INVENTLOCATION" />
        </property>
        <property name="dlvterm" type="java.lang.String">
            <column name="DLVTERM" />
        </property>
        <property name="dlvmode" type="java.lang.String">
            <column name="DLVMODE" />
        </property>
        <property name="markupgroup" type="java.lang.String">
            <column name="MARKUPGROUP" />
        </property>
        <property name="clearingperiod" type="java.lang.String">
            <column name="CLEARINGPERIOD" />
        </property>
        <property name="freightzone" type="java.lang.String">
            <column name="FREIGHTZONE" />
        </property>
        <property name="creditrating" type="java.lang.String">
            <column name="CREDITRATING" />
        </property>
        <property name="taxgroup" type="java.lang.String">
            <column name="TAXGROUP" />
        </property>
        <property name="statisticsgroup" type="java.lang.String">
            <column name="STATISTICSGROUP" />
        </property>
        <property name="paymmode" type="java.lang.String">
            <column name="PAYMMODE" />
        </property>
        <property name="commissiongroup" type="java.lang.String">
            <column name="COMMISSIONGROUP" />
        </property>
        <property name="bankaccount" type="java.lang.String">
            <column name="BANKACCOUNT" />
        </property>
        <property name="paymsched" type="java.lang.String">
            <column name="PAYMSCHED" />
        </property>
        <property name="contactpersonid" type="java.lang.String">
            <column name="CONTACTPERSONID" />
        </property>
        <property name="invoiceaddress" type="int">
            <column name="INVOICEADDRESS" />
        </property>
        <property name="ouraccountnum" type="java.lang.String">
            <column name="OURACCOUNTNUM" />
        </property>
        <property name="salespoolid" type="java.lang.String">
            <column name="SALESPOOLID" />
        </property>
        <property name="incltax" type="int">
            <column name="INCLTAX" />
        </property>
        <property name="custitemgroupid" type="java.lang.String">
            <column name="CUSTITEMGROUPID" />
        </property>
        <property name="numbersequencegroup" type="java.lang.String">
            <column name="NUMBERSEQUENCEGROUP" />
        </property>
        <property name="paymdayid" type="java.lang.String">
            <column name="PAYMDAYID" />
        </property>
        <property name="lineofbusinessid" type="java.lang.String">
            <column name="LINEOFBUSINESSID" />
        </property>
        <property name="destinationcodeid" type="java.lang.String">
            <column name="DESTINATIONCODEID" />
        </property>
        <property name="girotype" type="int">
            <column name="GIROTYPE" />
        </property>
        <property name="suppitemgroupid" type="java.lang.String">
            <column name="SUPPITEMGROUPID" />
        </property>
        <property name="girotypeinterestnote" type="int">
            <column name="GIROTYPEINTERESTNOTE" />
        </property>
        <property name="taxlicensenum" type="java.lang.String">
            <column name="TAXLICENSENUM" />
        </property>
        <property name="websalesorderdisplay" type="int">
            <column name="WEBSALESORDERDISPLAY" />
        </property>
        <property name="paymspec" type="java.lang.String">
            <column name="PAYMSPEC" />
        </property>
        <property name="bankcentralbankpurposetext" type="java.lang.String">
            <column name="BANKCENTRALBANKPURPOSETEXT" />
        </property>
        <property name="bankcentralbankpurposecode" type="java.lang.String">
            <column name="BANKCENTRALBANKPURPOSECODE" />
        </property>
        <property name="intercompanyallowindirectcreation" type="int">
            <column name="INTERCOMPANYALLOWINDIRECTCREATION" />
        </property>
        <property name="packmaterialfeelicensenum" type="java.lang.String">
            <column name="PACKMATERIALFEELICENSENUM" />
        </property>
        <property name="taxbordernumberFi" type="java.lang.String">
            <column name="TAXBORDERNUMBERFI" />
        </property>
        <property name="einvoiceeannum" type="java.lang.String">
            <column name="EINVOICEEANNUM" />
        </property>
        <property name="fiscalcode" type="java.lang.String">
            <column name="FISCALCODE" />
        </property>
        <property name="dlvreason" type="java.lang.String">
            <column name="DLVREASON" />
        </property>
        <property name="forecastdmpinclude" type="int">
            <column name="FORECASTDMPINCLUDE" />
        </property>
        <property name="girotypecollectionletter" type="int">
            <column name="GIROTYPECOLLECTIONLETTER" />
        </property>
        <property name="salescalendarid" type="java.lang.String">
            <column name="SALESCALENDARID" />
        </property>
        <property name="custclassificationid" type="java.lang.String">
            <column name="CUSTCLASSIFICATIONID" />
        </property>
        <property name="intercompanydirectdelivery" type="int">
            <column name="INTERCOMPANYDIRECTDELIVERY" />
        </property>
        <property name="enterprisenumber" type="java.lang.String">
            <column name="ENTERPRISENUMBER" />
        </property>
        <property name="shipcarrieraccount" type="java.lang.String">
            <column name="SHIPCARRIERACCOUNT" />
        </property>
        <property name="girotypeprojinvoice" type="int">
            <column name="GIROTYPEPROJINVOICE" />
        </property>
        <property name="inventsiteid" type="java.lang.String">
            <column name="INVENTSITEID" />
        </property>
        <property name="orderentrydeadlinegroupid" type="java.lang.String">
            <column name="ORDERENTRYDEADLINEGROUPID" />
        </property>
        <property name="shipcarrierid" type="java.lang.String">
            <column name="SHIPCARRIERID" />
        </property>
        <property name="shipcarrierfuelsurcharge" type="int">
            <column name="SHIPCARRIERFUELSURCHARGE" />
        </property>
        <property name="shipcarrierblindshipment" type="int">
            <column name="SHIPCARRIERBLINDSHIPMENT" />
        </property>
        <property name="shipcarrieraccountcode" type="java.lang.String">
            <column name="SHIPCARRIERACCOUNTCODE" />
        </property>
        <property name="girotypefreetextinvoice" type="int">
            <column name="GIROTYPEFREETEXTINVOICE" />
        </property>
        <property name="syncentityid" type="java.lang.String">
            <column name="SYNCENTITYID" />
        </property>
        <property name="syncversion" type="long">
            <column name="SYNCVERSION" />
        </property>
        <property name="memo" type="java.lang.String">
            <column name="MEMO" />
        </property>
        <property name="salesdistrictid" type="java.lang.String">
            <column name="SALESDISTRICTID" />
        </property>
        <property name="segmentid" type="java.lang.String">
            <column name="SEGMENTID" />
        </property>
        <property name="subsegmentid" type="java.lang.String">
            <column name="SUBSEGMENTID" />
        </property>
        <property name="rfiditemtagging" type="int">
            <column name="RFIDITEMTAGGING" />
        </property>
        <property name="rfidcasetagging" type="int">
            <column name="RFIDCASETAGGING" />
        </property>
        <property name="rfidpallettagging" type="int">
            <column name="RFIDPALLETTAGGING" />
        </property>
        <property name="companychainid" type="java.lang.String">
            <column name="COMPANYCHAINID" />
        </property>
        <property name="companyidsiret" type="java.lang.String">
            <column name="COMPANYIDSIRET" />
        </property>
        <property name="party" type="long">
            <column name="PARTY" />
        </property>
        <property name="identificationnumber" type="java.lang.String">
            <column name="IDENTIFICATIONNUMBER" />
        </property>
        <property name="partycountry" type="java.lang.String">
            <column name="PARTYCOUNTRY" />
        </property>
        <property name="partystate" type="java.lang.String">
            <column name="PARTYSTATE" />
        </property>
        <property name="paymidtype" type="java.lang.String">
            <column name="PAYMIDTYPE" />
        </property>
        <property name="factoringaccount" type="java.lang.String">
            <column name="FACTORINGACCOUNT" />
        </property>
        <property name="defaultdimension" type="long">
            <column name="DEFAULTDIMENSION" />
        </property>
        <property name="custexcludecollectionfee" type="int">
            <column name="CUSTEXCLUDECOLLECTIONFEE" />
        </property>
        <property name="custexcludeinterestcharges" type="int">
            <column name="CUSTEXCLUDEINTERESTCHARGES" />
        </property>
        <property name="companynafcode" type="long">
            <column name="COMPANYNAFCODE" />
        </property>
        <property name="bankcustpaymidtable" type="long">
            <column name="BANKCUSTPAYMIDTABLE" />
        </property>
        <property name="girotypeaccountstatement" type="int">
            <column name="GIROTYPEACCOUNTSTATEMENT" />
        </property>
        <property name="maincontactworker" type="long">
            <column name="MAINCONTACTWORKER" />
        </property>
        <property name="creditcardaddressverification" type="int">
            <column name="CREDITCARDADDRESSVERIFICATION" />
        </property>
        <property name="creditcardcvc" type="int">
            <column name="CREDITCARDCVC" />
        </property>
        <property name="creditcardaddressverificationvoid" type="int">
            <column name="CREDITCARDADDRESSVERIFICATIONVOID" />
        </property>
        <property name="creditcardaddressverificationlevel" type="int">
            <column name="CREDITCARDADDRESSVERIFICATIONLEVEL" />
        </property>
        <property name="companytypeMx" type="int">
            <column name="COMPANYTYPEMX" />
        </property>
        <property name="rfcMx" type="java.lang.String">
            <column name="RFCMX" />
        </property>
        <property name="curpMx" type="java.lang.String">
            <column name="CURPMX" />
        </property>
        <property name="stateinscriptionMx" type="java.lang.String">
            <column name="STATEINSCRIPTIONMX" />
        </property>
        <property name="residenceforeigncountryregionidIt" type="java.lang.String">
            <column name="RESIDENCEFOREIGNCOUNTRYREGIONIDIT" />
        </property>
        <property name="birthcountycodeIt" type="java.lang.String">
            <column name="BIRTHCOUNTYCODEIT" />
        </property>
        <property name="birthdateIt" type="java.util.Date">
            <column name="BIRTHDATEIT" />
        </property>
        <property name="birthplaceIt" type="java.lang.String">
            <column name="BIRTHPLACEIT" />
        </property>
        <property name="einvoice" type="int">
            <column name="EINVOICE" />
        </property>
        <property name="ccmnumBr" type="java.lang.String">
            <column name="CCMNUMBR" />
        </property>
        <property name="cnpjcpfnumBr" type="java.lang.String">
            <column name="CNPJCPFNUMBR" />
        </property>
        <property name="pbacustgroupid" type="java.lang.String">
            <column name="PBACUSTGROUPID" />
        </property>
        <property name="ienumBr" type="java.lang.String">
            <column name="IENUMBR" />
        </property>
        <property name="suframanumberBr" type="java.lang.String">
            <column name="SUFRAMANUMBERBR" />
        </property>
        <property name="suframaBr" type="int">
            <column name="SUFRAMABR" />
        </property>
        <property name="custfinaluserBr" type="int">
            <column name="CUSTFINALUSERBR" />
        </property>
        <property name="interestcodeBr" type="java.lang.String">
            <column name="INTERESTCODEBR" />
        </property>
        <property name="finecodeBr" type="java.lang.String">
            <column name="FINECODEBR" />
        </property>
        <property name="suframapiscofinsBr" type="int">
            <column name="SUFRAMAPISCOFINSBR" />
        </property>
        <property name="taxwithholdcalculateTh" type="int">
            <column name="TAXWITHHOLDCALCULATETH" />
        </property>
        <property name="taxwithholdgroupTh" type="java.lang.String">
            <column name="TAXWITHHOLDGROUPTH" />
        </property>
        <property name="consdayJp" type="int">
            <column name="CONSDAYJP" />
        </property>
        <property name="nitBr" type="java.lang.String">
            <column name="NITBR" />
        </property>
        <property name="inssceiBr" type="java.lang.String">
            <column name="INSSCEIBR" />
        </property>
        <property name="cnaeBr" type="java.lang.String">
            <column name="CNAEBR" />
        </property>
        <property name="icmscontributorBr" type="int">
            <column name="ICMSCONTRIBUTORBR" />
        </property>
        <property name="servicecodeondlvaddressBr" type="int">
            <column name="SERVICECODEONDLVADDRESSBR" />
        </property>
        <property name="inventprofiletypeRu" type="int">
            <column name="INVENTPROFILETYPERU" />
        </property>
        <property name="inventprofileidRu" type="java.lang.String">
            <column name="INVENTPROFILEIDRU" />
        </property>
        <property name="taxwithholdcalculateIn" type="int">
            <column name="TAXWITHHOLDCALCULATEIN" />
        </property>
        <property name="unitedvatinvoiceLt" type="int">
            <column name="UNITEDVATINVOICELT" />
        </property>
        <property name="enterprisecode" type="java.lang.String">
            <column name="ENTERPRISECODE" />
        </property>
        <property name="commercialregistersection" type="java.lang.String">
            <column name="COMMERCIALREGISTERSECTION" />
        </property>
        <property name="commercialregisterinsetnumber" type="java.lang.String">
            <column name="COMMERCIALREGISTERINSETNUMBER" />
        </property>
        <property name="commercialregister" type="java.lang.String">
            <column name="COMMERCIALREGISTER" />
        </property>
        <property name="regnumW" type="java.lang.String">
            <column name="REGNUMW" />
        </property>
        <property name="isresidentLv" type="int">
            <column name="ISRESIDENTLV" />
        </property>
        <property name="intbankLv" type="java.lang.String">
            <column name="INTBANKLV" />
        </property>
        <property name="paymentreferenceEe" type="java.lang.String">
            <column name="PAYMENTREFERENCEEE" />
        </property>
        <property name="packagedepositexcemptPl" type="int">
            <column name="PACKAGEDEPOSITEXCEMPTPL" />
        </property>
        <property name="fednonfedindicator" type="int">
            <column name="FEDNONFEDINDICATOR" />
        </property>
        <property name="irs1099cindicator" type="int">
            <column name="IRS1099CINDICATOR" />
        </property>
        <property name="agencylocationcode" type="java.lang.String">
            <column name="AGENCYLOCATIONCODE" />
        </property>
        <property name="federalcomments" type="java.lang.String">
            <column name="FEDERALCOMMENTS" />
        </property>
        <property name="usepurchrequest" type="int">
            <column name="USEPURCHREQUEST" />
        </property>
        <property name="mcrmergedparent" type="java.lang.String">
            <column name="MCRMERGEDPARENT" />
        </property>
        <property name="mcrmergedroot" type="java.lang.String">
            <column name="MCRMERGEDROOT" />
        </property>
        <property name="affiliatedRu" type="int">
            <column name="AFFILIATEDRU" />
        </property>
        <property name="cashdiscbasedays" type="int">
            <column name="CASHDISCBASEDAYS" />
        </property>
        <property name="custtradingpartnercode" type="long">
            <column name="CUSTTRADINGPARTNERCODE" />
        </property>
        <property name="custwhtcontributiontypeBr" type="int">
            <column name="CUSTWHTCONTRIBUTIONTYPEBR" />
        </property>
        <property name="daxintegrationid" type="java.lang.String">
            <column name="DAXINTEGRATIONID" />
        </property>
        <property name="defaultdirectdebitmandate" type="long">
            <column name="DEFAULTDIRECTDEBITMANDATE" />
        </property>
        <property name="defaultinventstatusid" type="java.lang.String">
            <column name="DEFAULTINVENTSTATUSID" />
        </property>
        <property name="entrycertificaterequiredW" type="int">
            <column name="ENTRYCERTIFICATEREQUIREDW" />
        </property>
        <property name="exportsalesPl" type="int">
            <column name="EXPORTSALESPL" />
        </property>
        <property name="expressbilloflading" type="int">
            <column name="EXPRESSBILLOFLADING" />
        </property>
        <property name="fiscaldoctypePl" type="int">
            <column name="FISCALDOCTYPEPL" />
        </property>
        <property name="foreignresidentRu" type="int">
            <column name="FOREIGNRESIDENTRU" />
        </property>
        <property name="generateincomingfiscaldocumentBr" type="int">
            <column name="GENERATEINCOMINGFISCALDOCUMENTBR" />
        </property>
        <property name="invoicepostingtypeRu" type="int">
            <column name="INVOICEPOSTINGTYPERU" />
        </property>
        <property name="issueownentrycertificateW" type="int">
            <column name="ISSUEOWNENTRYCERTIFICATEW" />
        </property>
        <property name="issuercountryHu" type="java.lang.String">
            <column name="ISSUERCOUNTRYHU" />
        </property>
        <property name="lvpaymtranscodes" type="long">
            <column name="LVPAYMTRANSCODES" />
        </property>
        <property name="mandatoryvatdatePl" type="int">
            <column name="MANDATORYVATDATEPL" />
        </property>
        <property name="passportnoHu" type="java.lang.String">
            <column name="PASSPORTNOHU" />
        </property>
        <property name="pdscustrebategroupid" type="java.lang.String">
            <column name="PDSCUSTREBATEGROUPID" />
        </property>
        <property name="pdsfreightaccrued" type="int">
            <column name="PDSFREIGHTACCRUED" />
        </property>
        <property name="pdsrebatetmagroup" type="java.lang.String">
            <column name="PDSREBATETMAGROUP" />
        </property>
        <property name="taxperiodpaymentcodePl" type="java.lang.String">
            <column name="TAXPERIODPAYMENTCODEPL" />
        </property>
        <property name="usecashdisc" type="int">
            <column name="USECASHDISC" />
        </property>
        <property name="modifieddatetime" type="java.util.Date">
            <column name="MODIFIEDDATETIME" />
        </property>
        <property name="delModifiedtime" type="int">
            <column name="DELMODIFIEDTIME" />
        </property>
        <property name="modifiedby" type="java.lang.String">
            <column name="MODIFIEDBY" />
        </property>
        <property name="createddatetime" type="java.util.Date">
            <column name="CREATEDDATETIME" />
        </property>
        <property name="delCreatedtime" type="int">
            <column name="DELCREATEDTIME" />
        </property>
        <property name="dataareaid" type="java.lang.String">
            <column name="DATAAREAID" />
        </property>
        <property name="recversion" type="int">
            <column name="RECVERSION" />
        </property>
        <property name="partition" type="long">
            <column name="PARTITION" />
        </property>
        <property name="recid" type="long">
            <column name="RECID" />
        </property>
        <property name="einvoiceregisterIt" type="int">
            <column name="EINVOICEREGISTERIT" />
        </property>
        <property name="foreigneridBr" type="java.lang.String">
            <column name="FOREIGNERIDBR" />
        </property>
        <property name="authorityofficeIt" type="java.lang.String">
            <column name="AUTHORITYOFFICEIT" />
        </property>
        <property name="presencetypeBr" type="int">
            <column name="PRESENCETYPEBR" />
        </property>
        <property name="taxgstreliefgroupheadingMy" type="long">
            <column name="TAXGSTRELIEFGROUPHEADINGMY" />
        </property>
    </class>
</hibernate-mapping>

如您所见,映射生成器有两个错误:1)标识不正确的ID; 2)它将CusttableId类解释为一对多关系,而不是将其用作Custtable类的ID。

处理此映射,将CusttableId类映射为Custtable类的ID的正确方法是什么?

您正在寻找EmbeddedId或IdClass: https ://docs.jboss.org/hibernate/orm/5.0/mappingGuide/zh-CN/html/ch06.html#identifiers-composite-nonaggregated

由于从提供的XML来看,您正在使用Hibernate 3,因此应查看以下示例: https : //docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html#mapping-declaration-id

根据您的情况,您可以删除该类,并用以下内容替换不正确的关联:

<composite-id> 
   <key-property name="accountnum"/> 
   <key-property name="partition"/> 
   <key-property name="dataareaid"/> 
</composite-id>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM