hibernate 注解 聯合主鍵映射


聯合主鍵用Hibernate注解映射方式主要有三種:
第一、將聯合主鍵的字段單獨放在一個類中,該類需要實現java.io.Serializable接口並重寫equals和hascode,再將 該類注解為@Embeddable,最后在主類中(該類不包含聯合主鍵類中的字段)保存該聯合主鍵類的一個引用,並生成set和get方法,並將該引用注 解為@Id
第二、將聯合主鍵的字段單獨放在一個類中,該類需要實現java.io.Serializable接口並重寫equals和hascode,最后 在主類中(該類不包含聯合主鍵類中的字段)保存該聯合主鍵類的一個引用,並生成set和get方法,並將該引用注解為@EmbeddedId
第三、將聯合主鍵的字段單獨放在一個類中,該類需要實現java.io.Serializable接口並要重寫equals和hashcode. 最后在主類中(該類包含聯合主鍵類中的字段)將聯合主鍵字段都注解為@Id,並在該類上方將上這樣的注解:@IdClass(聯合主鍵類.class)

 

@Column —— 注解聲明了屬性到列的映射。該注解有如下的屬性
  name  可選,列名(默認值是屬性名)
  unique 可選,是否在該列上設置唯一約束(默認值false)
  nullable 可選,是否設置該列的值可以為空(默認值false)
  insertable 可選,該列是否作為生成的insert語句中的一個列(默認值true)
  updatable 可選,該列是否作為生成的update語句中的一個列(默認值true)
  columnDefinition 可選,為這個特定列覆蓋sql ddl片段(這可能導致無法在不同數據庫間移植)
  table 可選,定義對應的表(默認為主表)
  length 可選,列長度(默認值255)
  precision 可選,列十進制精度(decimal precision)(默認值0)
  scale 可選,如果列十進制數值范圍(decimal scale)可用,在此設置(默認值0) 
 precision屬性和scale屬性表示精度時,當字段類型為double時,precision表示數值的總長度,scale表示小數點所占的位數。 

 

@Digits(integer=12, fraction=3) 

檢查此值是否是一個數字,並且這個數字的整數部分不超過integer定義的位數, 和小數部分不超過fraction 定義的位數.[對應的數據庫表字段會被設置精度(precision)和准度(scale)]

 

@Email  

檢查所給的字符串是否符合email地址的格式

 

@Future

檢查給定的日期是否比現在晚

 

@Past

檢查標注對象中的值表示的日期比當前早.

 

@Length(min=, max=)

檢查該字符串的長度是否在min 和 max規定的范圍內.[對應的數據庫表字段的長度會被設置成約束中定義的最大值]

 

@Max

檢查該值是否小於或等於約束條件中指定的最大值.[會給對應的數據庫表字段添加一個check的約束條件]

 

@NotNull

檢查該值不為null[對應的表字段不允許為null]

 

@NotBlank

檢查該字符串不為null,並且不是空字符串. 本約束和下面的@NotEmpty的不同之處在於,本約束只能被用在字符串類型上,並且會忽略字符串尾部的空

 

 

 

@NotEmpty

檢查該值不為null同時也不為空.  

 

@Null

檢查該值應該為null.

 

@Range(min=, max=)

檢查該值是否在[min, max)之間

 

@Size(min=, max=)

檢查該值的size是否在[min, max)之間.[對應的數據庫表字段的長度會被設置成約束中定義的最大值.]

 

@URL(protocol=, host=, port=)

判斷該值是否是一個有效的URL, 如果給出了約束中的protocol, host 或 port 參數的話,那個被校驗的值需要和其匹配.

 

@Valid

遞歸得對關聯對象進行校驗, 如果關聯對象是個集合或者數組, 那么對其中的元素進行遞歸校驗,如果是一個map,則對其中的值部分進行校驗.

 

@Transient

表示該屬性並非是一個到數據庫表的字段的映射,ORM框架將忽略該屬性.

被注解成 @Transient 的 getter 方法或屬性,將不會被持久化,hibernate 會忽略這些字段和屬性。
 如果一個屬性並非數據庫表的字段映射,就務必將其標示為@Transient,否則,ORM框架默認其注解為@Basic

 

@Basic 

所有沒有定義注解的屬性,等價於在其上面添加了 @Basic 注解。通過 @Basic注解可以聲明屬性的獲取策略 ( fetch strategy ),默認的是即時獲取(early fetch),這里又討論到了
延遲關聯獲取和延遲屬性獲取,通常不需要對簡單屬性設置延遲獲取,如需要定義@Basic(fetch=FetchType.LAZY)
通過@Basic注解可以聲明屬性的獲取策略(lazy與否),默認的是即時獲取(early fetch),這里又討論到了
延遲關聯獲取和延遲屬性獲取,通常不需要對簡單屬性設置延遲獲取,如需要定義@Basic(fetch=FetchType.LAZY) 

 

@OrderBy(value = "id ASC")

指明加載OrderItem 時按id 的升序排序

hierbate search注解【基於lucene】

 

@DateBridge(resolution = Resolution.SECOND)

因為lucene有些版本現在貌似只能對字符串進行索引【新的版本貌似支持數值索引】,所有date類型需要轉換成 string,Resolution.SECOND就是解析成秒格式的字符串,有以下參數

Resolution.YEAR: yyyy

Resolution.MONTH: yyyyMM

Resolution.DAY: yyyyMMdd

 Resolution.HOUR: yyyyMMddHH

Resolution.MINUTE: yyyyMMddHHmm

Resolution.SECOND: yyyyMMddHHmmss

Resolution.MILLISECOND: yyyyMMddHHmmssSSS

 

@MappedSuperclass 

基於代碼復用和模型分離的思想,在項目開發中使用JPA的@MappedSuperclass注解將實體類的多個共同屬性封裝到非實體類中,適合父類和子類的關系

    0、 @MappedSuperclass注解只能標注在類上

    1、標注為@MappedSuperclass的類將不是一個完整的實體類,他不會映射到數據庫表,但是他的屬性都將映射到其子類的數據庫字段中。

    2、標注為@MappedSuperclass的類不能再標注@Entity或@Table注解,也無需實現序列化接口


    3、如果一個標注為@MappedSuperclass的類繼承了另外一個實體類或者另外一個同樣標注了@MappedSuperclass的類的話,他將可以使用@AttributeOverride或@AttributeOverrides注解重定義其父類(無論是否是實體類)的屬性映射到數據庫表中的字段。比如可以重定義字段名或長度等屬性,使用@AttributeOverride中的子屬性@Column進行具體的定義。

    注意:對於其父類中標注@Lob注解的屬性將不能重載,並且@AttributeOverride里的@Column設置都將不起作用。JPA規范中對@Lob注解並沒有說明不能同時標注@Column注解,但是在實際使用中Hibernate JPA不支持這種標注方式。

    4、標注為@MappedSuperclass的類其屬性最好設置為protected或default類型的,以保證其同一個包下的子類可以直接調用它的屬性。

 

    public class BmRoRolerightmatrixPK implements Serializable{  
          
        private static final long serialVersionUID = 1L;  
          
        private Long actId;//功能操作ID  
        private Long roleId;//角色ID  
          
        @Column(name = "ACT_ID",unique = false,nullable = true,length = 10)  
        public Long getActId() {  
            return actId;  
        }  
        public void setActId(Long actId) {  
            this.actId = actId;  
        }  
          
        @Column(name = "ROLE_ID",unique = false,nullable = true,length = 10)  
        public Long getRoleId() {  
            return roleId;  
        }  
        public void setRoleId(Long roleId) {  
            this.roleId = roleId;  
        }  
          
          
    }  

 

    @Entity  
    @IdClass(BmRoRolerightmatrixPK.class)  
    @Table(name = "BM_RO_ROLERIGHTMATRIX")  
    public class BmRoRolerightmatrix implements Serializable{  
        private static final long serialVersionUID = 1L;  
        public BmRoRolerightmatrix(){}  
        //屬性  
        private Long actId;//功能操作ID  
      
        private Long roleId;//角色ID  
      
        @Id  
        public Long getActId() {  
            return this.actId;  
        }  
          
        @Id  
        public Long getRoleId() {  
            return this.roleId;  
        }  
    ...  

 

 

public class WalletBalanceId implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = -6967634249077311858L;

    /***
     * CID 客戶號
     */
    @ManyToOne
    @JoinColumn(name = "CID")
    private Customer customer;

    /***
     * 理財賬號
     */
    @Column(name = "ACCT_NO")
    private String acctNo;

    public WalletBalanceId() {
        super();
    }

    public WalletBalanceId(Customer customer, String acctNo) {
        super();
        this.customer = customer;
        this.acctNo = acctNo;
    }

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public String getAcctNo() {
        return acctNo;
    }

    public void setAcctNo(String acctNo) {
        this.acctNo = acctNo;
    }

    @Override
    public String toString() {
        return ReflectionToStringBuilder.toString(this,
                ToStringStyle.SHORT_PREFIX_STYLE);
    }
}

 

@Entity
@Table(name = "T_WALLET_BALANCE")
@IdClass(WalletBalanceId.class)
public class WalletBalance implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -4041192003429561466L;

    /***
     * CID(主鍵) 客戶號
     */
    @Id
    @ManyToOne
    @JoinColumn(name = "CID")
    private Customer customer;

    /***
     * 理財賬號
     */
    @Id
    @Column(name = "ACCT_NO")
    private String acctNo;

    /***
     * 總金額
     */
    @Column(name = "TOTAL_AMT")
    private BigDecimal totalAmt;

    /***
     * 資金狀態
     */
    @Column(name = "FUND_STATE")
    private String fundState;

    /***
     * 更新日期
     */
    @Column(name = "UPD_DATE")
    private Date updDate;

    public WalletBalance() {
        super();
    }

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public String getAcctNo() {
        return acctNo;
    }

    public void setAcctNo(String acctNo) {
        this.acctNo = acctNo;
    }

    public BigDecimal getTotalAmt() {
        return totalAmt;
    }

    public void setTotalAmt(BigDecimal totalAmt) {
        this.totalAmt = totalAmt;
    }

    public String getFundState() {
        return fundState;
    }

    public void setFundState(String fundState) {
        this.fundState = fundState;
    }

    public Date getUpdDate() {
        return updDate;
    }

    public void setUpdDate(Date updDate) {
        this.updDate = updDate;
    }

    @Override
    public String toString() {
        return ReflectionToStringBuilder.toString(this,
                ToStringStyle.SHORT_PREFIX_STYLE);
    }
}

 

public class CplsPK extends BaseObject {
    

    public String getCpzxh() {
        return cpzxh;
    }
    public void setCpzxh(String cpzxh) {
        this.cpzxh = cpzxh;
    }

    public String getXtgzh() {
        return xtgzh;
    }
    public void setXtgzh(String xtgzh) {
        this.xtgzh = xtgzh;
    }

    public String getDqdh() {
        return dqdh;
    }
    public void setDqdh(String dqdh) {
        this.dqdh = dqdh;
    }
    private String cpzxh;
    private String xtgzh;
    private String dqdh;

}

 

@Entity
@Table(name = "sim_cpls",catalog="yyptsim")
@IdClass(com.yyptsim.dbmap.CplsPK.class)
public class Cpls  extends BaseObject{
    
    private String cpzxh;
    private String xtgzh;
    private String dqdh;
    private String syckh;//索引參考號8位長度,用於沖正用
    private String jygy;
    private String gylsh;
    private String qsrq;
    private String transtime;
    private String sllwhbh;
    private String sljgbsm;
    private String jsjgbsm;
    private String jydm;
    private String sllwhjydm;
    private String msgid;
    private String zhdh;
    private String jdbj;
    private double zhye;
    private String xym;
    private double jyje;
    private String  jlzt;
    
    public Cpls(String cpzxh,String xtgzh,String dqdh,String syckh,String jygy,String gylsh,String qsrq,String transtime,String sllwhbh,String sljgbsm,String jsjgbsm,String jydm,String sllwhjydm,String msgid,String zhdh,String jdbj,double zhye,String xym,double jyje,String  jlzt) {
        this.cpzxh=cpzxh;   
        this.xtgzh=xtgzh;   
        this.dqdh=dqdh;     
        this.syckh=syckh;     
        this.jygy=jygy;     
        this.gylsh=gylsh;   
        this.qsrq=qsrq;     
        this.transtime=transtime;
        this.sllwhbh=sllwhbh;
        this.sljgbsm=sljgbsm;
        this.jsjgbsm=jsjgbsm;
        this.jydm=jydm;     
        this.sllwhjydm=sllwhjydm;
        this.msgid=msgid;   
        this.zhdh=zhdh;     
        this.jdbj=jdbj;     
        this.zhye=zhye;     
        this.xym=xym;       
        this.jyje=jyje;     
        this.jlzt=jlzt;     
 
        
    }
   
    public Cpls()
    {

    }
    
  
    public void setCpzxh(String cpzxh)
    {
        this.cpzxh = cpzxh;
    }
    @Id
    @Column(name="cpzxh")
    public String getCpzxh()
    {
        return cpzxh;
    }
    @Id
    @Column(name="xtgzh")
    public String getXtgzh()
    {
        return xtgzh;
    }

    public void setXtgzh(String xtgzh)
    {
        this.xtgzh = xtgzh;
    }

    public void setDqdh(String dqdh)
    {
        this.dqdh = dqdh;
    }
    
    @Id
    @Column(name="dqdh")
    public String getDqdh()
    {
        return dqdh;
    }
    
    public void setSyckh(String syckh)
    {
        this.syckh = syckh;
    }
    
    @Basic
    @Column(name="syckh")
    public String getsyckh()
    {
        return syckh;
    }
    @Basic
    @Column(name="jygy")
    public String getJygy()
    {
        return  jygy;
    }
    public void setJygy(String jygy)
    {
        this.jygy = jygy;
    }
    @Basic
    @Column(name="gylsh")
    public String getGylsh()
    {
        return gylsh;
    }
    
    public void setGylsh(String gylsh)
    {
        this.gylsh = gylsh;
    }
    public void setQsrq(String qsrq)
    {
        this.qsrq = qsrq;
    }
    @Basic
    @Column(name="qsrq")
    public String getQsrq()
    {
        return qsrq;
    }
    
    public void setTranstime(String transtime)
    {
        this.transtime = transtime;
    }
    @Basic
    @Column(name="transtime")
    public String getTranstime()
    {
        return transtime;
    }
    @Basic
    @Column(name="sllwhbh")
    public String getSllwhbh()
    {
        return sllwhbh;
    }
    
    public void setSllwhbh(String sllwhbh)
    {
        this.sllwhbh = sllwhbh;
    }
    @Basic
    @Column(name="sljgbsm")
    public String getSljgbsm()
    {
        return sljgbsm;
    }
    
    public void setSljgbsm(String sljgbsm)
    {
        this.sljgbsm = sljgbsm;
    }
    
    
    public void setJsjgbsm(String jsjgbsm)
    {
        this.jsjgbsm = jsjgbsm;
    }
    @Basic
    @Column(name="jsjgbsm")
    public String getJsjgbsm()
    {
        return jsjgbsm;
    }
    

    public void setJydm(String jydm)
    {
        this.jydm = jydm;
    }
    @Basic
    @Column(name="jydm")
    public String getJydm()
    {
        return jydm;
    }
    
    public void setMsgid(String msgid)
    {
        this.msgid = msgid;
    }
    @Basic
    @Column(name="msgid")
    public String getMsgid()
    {
        return msgid;
    }
    @Basic
    @Column(name="sllwhjydm")
    public String getSllwhjydm()
    {
        return sllwhjydm;
    }
    
    public void setSllwhjydm(String sllwhjydm)
    {
        this.sllwhjydm = sllwhjydm;
    }
    
    
    public void setZhdh(String zhdh)
    {
        this.zhdh = zhdh;
    }
    @Basic
    @Column(name="zhdh")
    public String getZhdh()
    {
        return zhdh;
    }
    
    @Basic
    @Column(name="jdbj")
    public String getJdbj()
    {
        return jdbj;
    }
    
    public void setJdbj(String jdbj)
    {
        this.jdbj = jdbj;
    }
    @Basic
    @Column(name="zhye")
    public double getZhye()
    {
        return zhye;
    }
    
    public void setZhye(double zhye)
    {
        this.zhye = zhye;
    }
    
    public void setXym(String xym)
    {
        this.xym = xym;
    }
    @Basic
    @Column(name="xym")
    public String getXym()
    {
        return xym;
    }
    
    @Basic
    @Column(name="jyje")
    public double getJyje()
    {
        return jyje;
    }
    
    public void setJyje(double jyje)
    {
        this.jyje = jyje;
    }
    
    public void setJlzt(String jlzt)
    {
        this.jlzt = jlzt;
    }
    @Basic
    @Column(name="jlzt")
    public String getJlzt()
    {
        return jlzt;
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM