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

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 implementsSerializable{private static final long serialVersionUID = 1L;private Long actId;//功能操作ID

private Long roleId;//角色ID

@Column(name= "ACT_ID",unique = false,nullable = true,length = 10)publicLong getActId() {returnactId;

}public voidsetActId(Long actId) {this.actId =actId;

}

@Column(name= "ROLE_ID",unique = false,nullable = true,length = 10)publicLong getRoleId() {returnroleId;

}public voidsetRoleId(Long roleId) {this.roleId =roleId;

}

}

@Entity

@IdClass(BmRoRolerightmatrixPK.class)

@Table(name= "BM_RO_ROLERIGHTMATRIX")public class BmRoRolerightmatrix implementsSerializable{private static final long serialVersionUID = 1L;publicBmRoRolerightmatrix(){}//属性

private Long actId;//功能操作ID

private Long roleId;//角色ID

@IdpublicLong getActId() {return this.actId;

}

@IdpublicLong getRoleId() {return this.roleId;

}

...

public class WalletBalanceId implementsSerializable{/****/

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

* CID 客户号*/@ManyToOne

@JoinColumn(name= "CID")privateCustomer customer;/***

* 理财账号*/@Column(name= "ACCT_NO")privateString acctNo;publicWalletBalanceId() {super();

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

}publicCustomer getCustomer() {returncustomer;

}public voidsetCustomer(Customer customer) {this.customer =customer;

}publicString getAcctNo() {returnacctNo;

}public voidsetAcctNo(String acctNo) {this.acctNo =acctNo;

}

@OverridepublicString toString() {return ReflectionToStringBuilder.toString(this,

ToStringStyle.SHORT_PREFIX_STYLE);

}

}

@Entity

@Table(name= "T_WALLET_BALANCE")

@IdClass(WalletBalanceId.class)public class WalletBalance implementsSerializable {/****/

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

* CID(主键) 客户号*/@Id

@ManyToOne

@JoinColumn(name= "CID")privateCustomer customer;/***

* 理财账号*/@Id

@Column(name= "ACCT_NO")privateString acctNo;/***

* 总金额*/@Column(name= "TOTAL_AMT")privateBigDecimal totalAmt;/***

* 资金状态*/@Column(name= "FUND_STATE")privateString fundState;/***

* 更新日期*/@Column(name= "UPD_DATE")privateDate updDate;publicWalletBalance() {super();

}publicCustomer getCustomer() {returncustomer;

}public voidsetCustomer(Customer customer) {this.customer =customer;

}publicString getAcctNo() {returnacctNo;

}public voidsetAcctNo(String acctNo) {this.acctNo =acctNo;

}publicBigDecimal getTotalAmt() {returntotalAmt;

}public voidsetTotalAmt(BigDecimal totalAmt) {this.totalAmt =totalAmt;

}publicString getFundState() {returnfundState;

}public voidsetFundState(String fundState) {this.fundState =fundState;

}publicDate getUpdDate() {returnupdDate;

}public voidsetUpdDate(Date updDate) {this.updDate =updDate;

}

@OverridepublicString toString() {return ReflectionToStringBuilder.toString(this,

ToStringStyle.SHORT_PREFIX_STYLE);

}

}

public class CplsPK extendsBaseObject {publicString getCpzxh() {returncpzxh;

}public voidsetCpzxh(String cpzxh) {this.cpzxh =cpzxh;

}publicString getXtgzh() {returnxtgzh;

}public voidsetXtgzh(String xtgzh) {this.xtgzh =xtgzh;

}publicString getDqdh() {returndqdh;

}public voidsetDqdh(String dqdh) {this.dqdh =dqdh;

}privateString cpzxh;privateString xtgzh;privateString dqdh;

}

@Entity

@Table(name= "sim_cpls",catalog="yyptsim")

@IdClass(com.yyptsim.dbmap.CplsPK.class)public class Cpls extendsBaseObject{privateString cpzxh;privateString xtgzh;privateString dqdh;private String syckh;//索引参考号8位长度,用于冲正用

privateString jygy;privateString gylsh;privateString qsrq;privateString transtime;privateString sllwhbh;privateString sljgbsm;privateString jsjgbsm;privateString jydm;privateString sllwhjydm;privateString msgid;privateString zhdh;privateString jdbj;private doublezhye;privateString xym;private doublejyje;privateString 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,doublejyje,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;

}publicCpls()

{

}public voidsetCpzxh(String cpzxh)

{this.cpzxh =cpzxh;

}

@Id

@Column(name="cpzxh")publicString getCpzxh()

{returncpzxh;

}

@Id

@Column(name="xtgzh")publicString getXtgzh()

{returnxtgzh;

}public voidsetXtgzh(String xtgzh)

{this.xtgzh =xtgzh;

}public voidsetDqdh(String dqdh)

{this.dqdh =dqdh;

}

@Id

@Column(name="dqdh")publicString getDqdh()

{returndqdh;

}public voidsetSyckh(String syckh)

{this.syckh =syckh;

}

@Basic

@Column(name="syckh")publicString getsyckh()

{returnsyckh;

}

@Basic

@Column(name="jygy")publicString getJygy()

{returnjygy;

}public voidsetJygy(String jygy)

{this.jygy =jygy;

}

@Basic

@Column(name="gylsh")publicString getGylsh()

{returngylsh;

}public voidsetGylsh(String gylsh)

{this.gylsh =gylsh;

}public voidsetQsrq(String qsrq)

{this.qsrq =qsrq;

}

@Basic

@Column(name="qsrq")publicString getQsrq()

{returnqsrq;

}public voidsetTranstime(String transtime)

{this.transtime =transtime;

}

@Basic

@Column(name="transtime")publicString getTranstime()

{returntranstime;

}

@Basic

@Column(name="sllwhbh")publicString getSllwhbh()

{returnsllwhbh;

}public voidsetSllwhbh(String sllwhbh)

{this.sllwhbh =sllwhbh;

}

@Basic

@Column(name="sljgbsm")publicString getSljgbsm()

{returnsljgbsm;

}public voidsetSljgbsm(String sljgbsm)

{this.sljgbsm =sljgbsm;

}public voidsetJsjgbsm(String jsjgbsm)

{this.jsjgbsm =jsjgbsm;

}

@Basic

@Column(name="jsjgbsm")publicString getJsjgbsm()

{returnjsjgbsm;

}public voidsetJydm(String jydm)

{this.jydm =jydm;

}

@Basic

@Column(name="jydm")publicString getJydm()

{returnjydm;

}public voidsetMsgid(String msgid)

{this.msgid =msgid;

}

@Basic

@Column(name="msgid")publicString getMsgid()

{returnmsgid;

}

@Basic

@Column(name="sllwhjydm")publicString getSllwhjydm()

{returnsllwhjydm;

}public voidsetSllwhjydm(String sllwhjydm)

{this.sllwhjydm =sllwhjydm;

}public voidsetZhdh(String zhdh)

{this.zhdh =zhdh;

}

@Basic

@Column(name="zhdh")publicString getZhdh()

{returnzhdh;

}

@Basic

@Column(name="jdbj")publicString getJdbj()

{returnjdbj;

}public voidsetJdbj(String jdbj)

{this.jdbj =jdbj;

}

@Basic

@Column(name="zhye")public doublegetZhye()

{returnzhye;

}public void setZhye(doublezhye)

{this.zhye =zhye;

}public voidsetXym(String xym)

{this.xym =xym;

}

@Basic

@Column(name="xym")publicString getXym()

{returnxym;

}

@Basic

@Column(name="jyje")public doublegetJyje()

{returnjyje;

}public void setJyje(doublejyje)

{this.jyje =jyje;

}public voidsetJlzt(String jlzt)

{this.jlzt =jlzt;

}

@Basic

@Column(name="jlzt")publicString getJlzt()

{returnjlzt;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值