zoukankan      html  css  js  c++  java
  • 联合主键三种实现方式

    联合主键可以通过Hibernate注解 进行映射,下面为大家展示三种实现方式:

    一、方法一(本人喜欢使用这种方式,使用主键类字段时可以当做正常字段一样使用)

    1.将联合主键的字段单独放在一个类中,该类需要重写equals和hashcode方法。

    2.在主类中(该类包含联合主键类中的字段)将联合主键字段都注解为@Id。

    3.最后在该类上加上注解:@IdClass(联合主键类.class),用来关联主键类

    代码示例:

     1 /**
     2  * 
     3  */
     4 package kklazy.acqinstmanagement.model;
     5 import javax.persistence.Column;
     6 import kklazy.persistence.model.SupportModel;
     7 
     8 /**
     9  * @author10  *  主键类
    11  */
    12 public class RouteProfitPK extends SupportModel{
    13     /**
    14      * 
    15      */
    16     private static final long serialVersionUID = -4243768063352460725L;
    17     /*复合主键值*/
    18     private String orgcode;//机构号
    19     private String transType;//交易类型(前端)
    20     
    21     /**
    22      * 无参数的public构造方法,必须要有
    23      */
    24     public RouteProfitPK() {
    25         
    26     }
    27     /**
    28      * @return the orgcode
    29      */
    30     @Column(name="ORGCODE")
    31     public String getOrgcode() {
    32         return orgcode;
    33     }
    34     /**
    35      * @param orgcode the orgcode to set
    36      */
    37     public void setOrgcode(String orgcode) {
    38         this.orgcode = orgcode;
    39     }
    40     
    41     /**
    42      * @return the transType
    43      */
    44     @Column(name="TRANSTYPE")
    45     public String getTransType() {
    46         return transType;
    47     }
    48     /**
    49      * @param transType the transType to set
    50      */
    51     public void setTransType(String transType) {
    52         this.transType = transType;
    53     }
    54     /* (non-Javadoc)
    55      * @see java.lang.Object#hashCode()
    56      */
    57     @Override
    58     public int hashCode() {
    59         final int prime = 31;
    60         int result = 1;
    61         result = prime * result + ((orgcode == null) ? 0 : orgcode.hashCode());
    62         result = prime * result + ((transType == null) ? 0 : transType.hashCode());
    63         return result;
    64     }
    65     /* (non-Javadoc)
    66      * @see java.lang.Object#equals(java.lang.Object)
    67      */
    68     @Override
    69     public boolean equals(Object obj) {
    70         if (this == obj)
    71             return true;
    72         if (obj == null)
    73             return false;
    74         if (getClass() != obj.getClass())
    75             return false;
    76         RouteProfitPK other = (RouteProfitPK) obj;
    77         if (orgcode == null) {
    78             if (other.orgcode != null)
    79                 return false;
    80         } else if (!orgcode.equals(other.orgcode))
    81             return false;
    82         if (transType == null) {
    83             if (other.transType != null)
    84                 return false;
    85         } else if (!transType.equals(other.transType))
    86             return false;
    87         return true;
    88     }
    89     
    90 
    91 
    92 }
      1 package kklazy.acqinstmanagement.model;
      2 import java.util.Date;
      3 import javax.persistence.Column;
      4 import javax.persistence.Entity;
      5 import javax.persistence.Id;
      6 import javax.persistence.IdClass;
      7 import javax.persistence.Table;
      8 import javax.persistence.Transient;
      9 import kklazy.persistence.model.SupportModel;
     10 
     11 /**
     12  * @author 
     13  * 主表
     14  */
     15 @Entity
     16 @Table(name="ROUTE_PROFIT")
     17 @IdClass(RouteProfitPK.class)
     18 public class RouteProfit extends SupportModel{
     19     private String orgcode;//机构号
     20     private String profitName;//分润名称
     21     private String transType;//交易类型(前端)
     22     private String payPeriod;//分润周期【00-日,01-周(1-7),02-月XX号(1-28)】格式为:00|    (日)01|4   (每周4)02|12  (每月12日)
     23     private String profitId;//分润方ID
     24     private String status;//状态(00_正常01_禁用)
     25     private Date entDate;//建立日期
     26     private String operaName;//操作员
     27     private String auditing;//审核(操作员
     28     private String memo;//备注
     29     
     30     private String transTypeName;//交易类型名称(页面显示)
     31     /**
     32      * @return the orgcode
     33      */
     34     @Column(name="ORGCODE")
     35     @Id
     36     public String getOrgcode() {
     37         return orgcode;
     38     }
     39     /**
     40      * @param orgcode the orgcode to set
     41      */
     42     public void setOrgcode(String orgcode) {
     43         this.orgcode = orgcode;
     44     }
     45     /**
     46      * @return the profitName
     47      */
     48     @Column(name="PROFIT_NAME")
     49     public String getProfitName() {
     50         return profitName;
     51     }
     52     /**
     53      * @param profitName the profitName to set
     54      */
     55     public void setProfitName(String profitName) {
     56         this.profitName = profitName;
     57     }
     58     /**
     59      * @return the transType
     60      */
     61     @Column(name="TRANSTYPE")
     62     @Id
     63     public String getTransType() {
     64         return transType;
     65     }
     66     /**
     67      * @param transType the transType to set
     68      */
     69     public void setTransType(String transType) {
     70         this.transType = transType;
     71     }
     72     /**
     73      * @return the payPeriod
     74      */
     75     @Column(name="PAYPERIOD")
     76     public String getPayPeriod() {
     77         return payPeriod;
     78     }
     79     /**
     80      * @param payPeriod the payPeriod to set
     81      */
     82     public void setPayPeriod(String payPeriod) {
     83         this.payPeriod = payPeriod;
     84     }
     85     /**
     86      * @return the profitId
     87      */
     88     @Column(name="PROFIT_ID")
     89     public String getProfitId() {
     90         return profitId;
     91     }
     92     /**
     93      * @param profitId the profitId to set
     94      */
     95     public void setProfitId(String profitId) {
     96         this.profitId = profitId;
     97     }
     98     /**
     99      * @return the status
    100      */
    101     @Column(name="STATUS")
    102     public String getStatus() {
    103         return status;
    104     }
    105     /**
    106      * @param status the status to set
    107      */
    108     public void setStatus(String status) {
    109         this.status = status;
    110     }
    111     /**
    112      * @return the entDate
    113      */
    114     @Column(name="ENTDATE")
    115     public Date getEntDate() {
    116         return entDate;
    117     }
    118     /**
    119      * @param entDate the entDate to set
    120      */
    121     public void setEntDate(Date entDate) {
    122         this.entDate = entDate;
    123     }
    124     /**
    125      * @return the operaName
    126      */
    127     @Column(name="OPERANAME")
    128     public String getOperaName() {
    129         return operaName;
    130     }
    131     /**
    132      * @param operaName the operaName to set
    133      */
    134     public void setOperaName(String operaName) {
    135         this.operaName = operaName;
    136     }
    137     /**
    138      * @return the auditing
    139      */
    140     @Column(name="AUDITING")
    141     public String getAuditing() {
    142         return auditing;
    143     }
    144     /**
    145      * @param auditing the auditing to set
    146      */
    147     public void setAuditing(String auditing) {
    148         this.auditing = auditing;
    149     }
    150     /**
    151      * @return the memo
    152      */
    153     @Column(name="MEMO")
    154     public String getMemo() {
    155         return memo;
    156     }
    157     /**
    158      * @param memo the memo to set
    159      */
    160     public void setMemo(String memo) {
    161         this.memo = memo;
    162     }
    163     /**
    164      * @return the transTypeName
    165      */
    166     @Transient
    167     public String getTransTypeName() {
    168         return transTypeName;
    169     }
    170     /**
    171      * @param transTypeName the transTypeName to set
    172      */
    173     public void setTransTypeName(String transTypeName) {
    174         this.transTypeName = transTypeName;
    175     }
    176     
    177     
    178     
    179 
    180 }

    二、方法二

    1.将联合主键的字段单独放在一个类中,该类需要重写equals和hascode方法。

    2.在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用(新增主键类属性),并生成set和get方法。

    3.最后为该类属性添加注解为@EmbeddedId

    代码示例:

    package kklazy.acqinstmanagement.model;
    import javax.persistence.Column;
    import kklazy.persistence.model.SupportModel;
    
    /**
     * @author 
     *  主键类
     */
    public class RouteMerchFeePK extends SupportModel {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1747760395347120749L;
         /*复合主键值*/
        private String feeId;        //手续费规则ID
        private String txnCode;      //交易类型
        private String fAmount;      //机构限额金额
        
        
        /**
         * 无参数的public构造方法,必须要有
         */
        public RouteMerchFeePK() {
    
        }
        
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((fAmount == null) ? 0 : fAmount.hashCode());
            result = prime * result + ((feeId == null) ? 0 : feeId.hashCode());
            result = prime * result + ((txnCode == null) ? 0 : txnCode.hashCode());
            return result;
        }
    
        /* (non-Javadoc)
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            RouteMerchFeePK other = (RouteMerchFeePK) obj;
            if (fAmount == null) {
                if (other.fAmount != null)
                    return false;
            } else if (!fAmount.equals(other.fAmount))
                return false;
            if (feeId == null) {
                if (other.feeId != null)
                    return false;
            } else if (!feeId.equals(other.feeId))
                return false;
            if (txnCode == null) {
                if (other.txnCode != null)
                    return false;
            } else if (!txnCode.equals(other.txnCode))
                return false;
            return true;
        }
    
        
    
        
    
        /**
         * @return the feeId
         */
        @Column(name="FEE_ID")
        public String getFeeId() {
            return feeId;
        }
    
        /**
         * @param feeId the feeId to set
         */
        public void setFeeId(String feeId) {
            this.feeId = feeId;
        }
    
        /**
         * @return the txnCode
         */
        @Column(name="TXN_CODE")
        public String getTxnCode() {
            return txnCode;
        }
    
        /**
         * @param txnCode the txnCode to set
         */
        public void setTxnCode(String txnCode) {
            this.txnCode = txnCode;
        }
    
        /**
         * @return the fAmount
         */
        @Column(name="F_AMOUNT")
        public String getfAmount() {
            return fAmount;
        }
    
        /**
         * @param fAmount the fAmount to set
         */
        public void setfAmount(String fAmount) {
            this.fAmount = fAmount;
        }
    
    }
      1 /**
      2  * 
      3  */
      4 package kklazy.acqinstmanagement.model;
      5 
      6 import java.math.BigDecimal;
      7 import java.util.Date;
      8 
      9 import javax.persistence.AttributeOverride;
     10 import javax.persistence.AttributeOverrides;
     11 import javax.persistence.Column;
     12 import javax.persistence.EmbeddedId;
     13 import javax.persistence.Entity;
     14 import javax.persistence.Table;
     15 import org.apache.commons.lang3.StringUtils;
     16 import kklazy.persistence.model.SupportModel;
     17 
     18 /**
     19  * @author 
     20  *  主表
     21  *
     22  */
     23 @Entity
     24 @Table(name="ROUTE_MERCH_FEE")
     25 public class RouteMerchFee extends SupportModel {
     26 
     27     public static final String FIXED_SEPARATOR = "|";
     28     public static final String FEE_TYPE_PERCENT = "01";
     29     /**
     30      * 
     31      */
     32     private static final long serialVersionUID = -6959012843279862852L;
     33     private RouteMerchFeePK id;//PK
     34     private String feeType;      //手续费类型
     35     private String debltFee;     //借记卡-手续费
     36     private String creditFee;    //贷记卡-手续费
     37     private String status;       //状态
     38     private Date endDate;      //建立日期
     39     private String operaName;      //操作员
     40     private Date updDate;      //修改日期
     41     private String auditing;     //审核
     42     private String memo;         //备注
     43     
     44     
     45     
     46 
     47     /**
     48      * @return the id
     49      */
     50      @EmbeddedId
     51     public RouteMerchFeePK getId() {
     52         return id;
     53     }
     54     /**
     55      * @param id the id to set
     56      */
     57     public void setId(RouteMerchFeePK id) {
     58         this.id = id;
     59     }
     60     
     61     /**
     62      * @return the feeType
     63      */
     64     @Column(name="FEETYPE")
     65     public String getFeeType() {
     66         return feeType;
     67     }
     68     /**
     69      * @param feeType the feeType to set
     70      */
     71     public void setFeeType(String feeType) {
     72         this.feeType = feeType;
     73     }
     74     /**
     75      * @return the debltFee
     76      */
     77     @Column(name="DEBIT_FEE")
     78     public String getDebltFee() {
     79         return debltFee;
     80     }
     81     /**
     82      * @param debltFee the debltFee to set
     83      */
     84     public void setDebltFee(String debltFee) {
     85         this.debltFee = debltFee;
     86     }
     87     
     88     public void setPageValueToDebltFee(){
     89         if(feeType.equals(FEE_TYPE_PERCENT)&& debitRate != null&& StringUtils.isNotEmpty(debitRate.trim()) ){
     90 //            this.debltFee=String.valueOf(Double.valueOf(debitRate)/100.00) ;
     91             this.debltFee = String.valueOf(BigDecimal.valueOf(Double.valueOf(debitRate).doubleValue()).divide(new BigDecimal("100")));
     92         }else{
     93             this.debltFee=debitRate;
     94         }
     95         this.debltFee=this.debltFee+"|"+this.debitRateMax+"|"+this.debitRateMin;
     96     }
     97     /**
     98      * @return the creditFee
     99      */
    100     @Column(name="CREDIT_FEE")
    101     public String getCreditFee() {
    102         return creditFee;
    103     }
    104     /**
    105      * @param creditFee the creditFee to set
    106      */
    107     public void setCreditFee(String creditFee) {
    108         this.creditFee = creditFee;
    109     }
    110     
    111     public void setPageValueToCreditFee(){
    112         if(feeType.equals(FEE_TYPE_PERCENT) && crebitRate !=null && StringUtils.isNotEmpty(crebitRate.trim())){
    113 //            this.creditFee=String.valueOf(Double.valueOf(crebitRate)/100.00);
    114             this.creditFee= String.valueOf(BigDecimal.valueOf(Double.valueOf(crebitRate).doubleValue()).divide(new BigDecimal("100")));
    115         }else{
    116             this.creditFee=crebitRate;
    117         }
    118         this.creditFee=this.creditFee+"|"+this.crebitRateMax+"|"+this.crebitRateMin;
    119     }
    120     /**
    121      * @return the status
    122      */
    123     @Column(name="STATUS")
    124     public String getStatus() {
    125         return status;
    126     }
    127     /**
    128      * @param status the status to set
    129      */
    130     public void setStatus(String status) {
    131         this.status = status;
    132     }
    133     /**
    134      * @return the endDate
    135      */
    136     @Column(name="ENTDATE")
    137     public Date getEndDate() {
    138         return endDate;
    139     }
    140     /**
    141      * @param endDate the endDate to set
    142      */
    143     public void setEndDate(Date endDate) {
    144         this.endDate = endDate;
    145     }
    146     /**
    147      * @return the operaName
    148      */
    149     @Column(name="OPERANAME")
    150     public String getOperaName() {
    151         return operaName;
    152     }
    153     /**
    154      * @param operaName the operaName to set
    155      */
    156     public void setOperaName(String operaName) {
    157         this.operaName = operaName;
    158     }
    159     /**
    160      * @return the updDate
    161      */
    162     @Column(name="UPDDATE")
    163     public Date getUpdDate() {
    164         return updDate;
    165     }
    166     /**
    167      * @param updDate the updDate to set
    168      */
    169     public void setUpdDate(Date updDate) {
    170         this.updDate = updDate;
    171     }
    172     /**
    173      * @return the auditing
    174      */
    175     @Column(name="AUDITING")
    176     public String getAuditing() {
    177         return auditing;
    178     }
    179     /**
    180      * @param auditing the auditing to set
    181      */
    182     public void setAuditing(String auditing) {
    183         this.auditing = auditing;
    184     }
    185     /**
    186      * @return the memo
    187      */
    188     @Column(name="MEMO")
    189     public String getMemo() {
    190         return memo;
    191     }
    192     /**
    193      * @param memo the memo to set
    194      */
    195     public void setMemo(String memo) {
    196         this.memo = memo;
    197     }
    198 
    199 
    200 }

    三、方法三

    1.将联合主键的字段单独放在一个类中,该类需要重写equals和hascode方法。

    2.该主键类注解为@Embeddable。

    3.最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用(新增主键类属性),并生成set和get方法,并将该引用注解为@Id。

    代码示例:

    /**
     * 主键类
    */
    @Embeddable  
    public class TestPK{  
      
        private static final long serialVersionUID = -3304319243957837925L;  
        private long id ;  
        private String name ;  
        /** 
         * @return the id 
         */  
        public long getId() {  
            return id;  
        }  
        /** 
         * @param id the id to set 
         */  
        public void setId(long id) {  
            this.id = id;  
        }  
        /** 
         * @return the name 
         */  
        public String getName() {  
            return name;  
        }  
        /** 
         * @param name the name to set 
         */  
        public void setName(String name) {  
            this.name = name;  
        }  
      
        @Override  
        public boolean equals(Object o) {  
            if(o instanceof Testkey0101){  
                Testkey01 key = (TestKey01)o ;  
                if(this.id == key.getId() && this.name.equals(key.getName())){  
                    return true ;  
                }  
            }  
            return false ;  
        }  
          
        @Override  
        public int hashCode() {  
            return this.name.hashCode();  
        }  
          
    }  
     1 /*
     2  * 主表类
     3 */
     4 @Entity  
     5 @Table(name="Test")  
     6 public class Test {  
     7   
     8     private static final long serialVersionUID = 3524215936351012384L;  
     9     private String address ;  
    10     private int age ;  
    11     private String email ;  
    12     private String phone ;  
    13     @Id
    14     private TestKey01 testKey ;
    15     ......
    16 }
  • 相关阅读:
    CNN comprehension
    Gradient Descent
    Various Optimization Algorithms For Training Neural Network
    gerrit workflow
    jenkins job配置脚本化
    Jenkins pipeline jobs隐式传参
    make words counter for image with the help of paddlehub model
    make words counter for image with the help of paddlehub model
    git push and gerrit code review
    image similarity
  • 原文地址:https://www.cnblogs.com/whhjava/p/9140869.html
Copyright © 2011-2022 走看看