聯合主鍵用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位址的格式
@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;
}
}