博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate 注解 联合主键映射
阅读量:4991 次
发布时间:2019-06-12

本文共 12728 字,大约阅读时间需要 42 分钟。

联合主键用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注解将实体类的多个共同属性封装到非实体类中,适合父类和子类的关系

    注解只能标注在类上

    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;    }}

 

转载于:https://www.cnblogs.com/mingforyou/p/4480066.html

你可能感兴趣的文章
关于C#操作INI文件的总结
查看>>
ZeptoLab Code Rush 2015 B. Om Nom and Dark Park
查看>>
ctci1.2
查看>>
[译]RabbitMQ教程C#版 - 路由
查看>>
升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署
查看>>
调用API函数减少c#内存占用(20+m减至1m以下)
查看>>
Android:onNewIntent()触发机制及注意事项
查看>>
珠宝公司之感想
查看>>
项目问题
查看>>
scss侦听并压缩
查看>>
我有接口文档, 你有酒吗?
查看>>
iOS - Push 通知推送
查看>>
[FJOI2007]轮状病毒
查看>>
Azure AADSTS7000215 其中一种问题的解决
查看>>
关于吃苦
查看>>
uva 1629切蛋糕(dp)
查看>>
生成awr报告
查看>>
cocos2d-x 3.0rc2 对于每个包执行情况的重要平台 (超级方便)
查看>>
Android 深入解析光传感器(二)
查看>>
Ansible@一个高效的配置管理工具--Ansible configure management--翻译(八)
查看>>