zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }
  • 相关阅读:
    将SqlServer的数据导出到Excel/csv中的各种方法 .
    SqlServer: 单用户模式下查杀相关进程实现单/多用户转换 .
    SQL Server游标的使用【转】
    由几行代码浅析C#的方法参数传递
    脑力风暴之小毛驴历险记(1)好多胡萝卜(下)
    关于sql_mode=only_full_group_by问题的解决方法
    如何同一个controller下添加新页面
    UNIAPP全局变量的实现方法
    Ztree点击节点选中复选框的相关操作
    一沙框架(yishaadmin) 前端引入VUE的实现方法
  • 原文地址:https://www.cnblogs.com/mingforyou/p/4480066.html
Copyright © 2011-2022 走看看