一、數據庫中字段的數據類型爲longtext 數據庫
存放二進制文本的註解方式fetch
private byte[] file; //設置延遲初始化 @Lob @Basic(fetch=FetchType.LAZY) public byte[] getFile() { return file; } public void setFile(byte[] file) { this.file = file; }
數據庫中數據類型爲longblobthis
設置該屬性與字段沒有映射關係的註解方式spa
private String Mail; @Transient public String getMail() { return Mail; } public void setMail(String mail) { Mail = mail; }
二、二進制文件格式類型
private byte[] file; //設置延遲初始化 @Lob @Basic(fetch=FetchType.LAZY) public byte[] getFile() { return file; } public void setFile(byte[] file) { this.file = file; }
三、設置字段屬性的註解方式code
private String userName; @Column(length=20,nullable=false,name="name") public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; }
length表示字段的長度blog
nullable表示字段是否爲空,false表示不能爲空,true表示能夠爲空排序
name表示修改字段名稱,默認狀況下采用屬性名稱做爲字段名稱索引
經過@Column註解設置,包含的設置以下ci
name
name屬性定義了被標註字段在數據庫表中所對應字段的名稱;字符串
unique
unique屬性表示該字段是否爲惟一標識,默認爲false。若是表中有一個字段須要惟一標識,則既能夠使用該標記,也能夠使用@Table標記中的@UniqueConstraint。
nullable
nullable屬性表示該字段是否能夠爲null值,默認爲true。
insertable
insertable屬性表示在使用「INSERT」腳本插入數據時,是否須要插入該字段的值。
updatable
updatable屬性表示在使用「UPDATE」腳本插入數據時,是否須要更新該字段的值。insertable和updatable屬性通常多用於只讀的屬性,例如主鍵和外鍵等。這些字段的值一般是自動生成的。
columnDefinition
columnDefinition屬性表示建立表時,該字段建立的SQL語句,通常用於經過Entity生成表定義時使用。(也就是說,若是DB中表已經建好,該屬性沒有必要使用。)
table
table屬性定義了包含當前字段的表名。
length
length屬性表示字段的長度,當字段的類型爲varchar時,該屬性纔有效,默認爲255個字符。
precision和scale
precision屬性和scale屬性表示精度,當字段類型爲double時,precision表示數值的總長度,scale表示小數點所佔的位數。
@Column(name = "user_code", nullable = false, length=32)//設置屬性userCode對應的字段爲user_code,長度爲32,非空 private String userCode; @Column(name = "user_wages", nullable = true, precision=12, scale=2)//設置屬性wages對應的字段爲user_wages,12位數字可保留兩位小數,能夠爲空 private double wages; @Temporal(TemporalType.DATE)//設置爲時間類型 private Date joinDate;
四、設置數據類型爲date的註解方式
private String birthday; @Temporal(TemporalType.DATE) public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; }
TemporalType.DATE 其效果爲1985-06-18
TemporalType.TIME 其效果爲16:15:05
TemporalType.TIMESTAMP 其效果爲1985-06-18 16:15:05
五、設置數據類型爲枚舉的方式
package com.hujuan.bean; public enum Gender { MEN,WOMEN } //設置默認值爲MEN private Gender gender = Gender.MEN; @Enumerated(EnumType.STRING) @Column(length=5,nullable=false) public Gender getGender() { return gender; } public void setGender(Gender gender) { this.gender = gender; }
EnumType.STRING 存進數據庫的爲字符串即MEN或WOMEN
EnumType.ORDIAL 存進數據庫的爲索引即0或1
存放大文本的註解方式
private String info; @Lob public String getInfo() { return info; } public void setInfo(String info) { this.info = info; }
六、字段排序
在加載數據的時候能夠爲其指定順序,使用@OrderBy註解實現
@Table(name = "USERS") public class User { @OrderBy(name = "group_name ASC, name DESC") private List books = new ArrayList(); }
七、主鍵生成策略
通常是以下4種:
1. AUTO:自動自增生成
AUTO是默認的主鍵生成策略,使用了AUTO策略,JPA會根據不一樣的數據庫類型來實現自增策略。好比MySql的表主鍵是自增1的,那麼此策略就會按照數據庫的自增1策略,每次插入數據庫記錄的時候都會自增1。Java代碼片斷以下:
@Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id;
2. TABLE:自定義表生成器
自定義表生成器是在數據庫中再創建一張新的表,這張表不是業務表,而是一張特殊表,這張表是專門用來管理整個數據庫的主鍵的具體值的。在數據庫中創建一張表以下圖所示:
@Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "myTablePK") @TableGenerator( name = "myTablePK", table = "tb_pk", pkColumnName = "table_PK_name", pkColumnValue = "tb_contact_pk", valueColumnName = "table_PK_value", allocationSize = 1) private Integer id;
下面對@TableGenerator標記的屬性說明一下:
Name:引用@GeneratedValue裏面的generator的值
Table:數據庫中專門用於生成主鍵的特殊表的表名
pkColumnName:tb_pk表中哪一個字段表明了被服務(須要生成主鍵表)的表名
valueColumnName:指定此輔助表的哪一個字段存儲了主鍵的具體值
pkColumnValue:指明一個主鍵名稱,依靠這個名稱能夠在這張特殊表中找到惟一的table_PK_value的值,而這個值就是具體的主鍵值。換句話說,數據庫有幾個業務表,這張表就應該有幾條記錄纔對(除去複合主鍵的狀況)
allocationSize:表明自增數
3. Identity:像MS SQL支持Identity字段的生成主鍵策略
4. Sequence:像Oracle支持Sequence的生成主鍵策略
public class Users implements Serializable { @Id @GeneratedValue(strategy=GenerationType.IDENTITY)//主鍵自增,注意,這種方式依賴於具體的數據庫,若是數據庫不支持自增主鍵,那麼這個類型是無法用的 @Column(name = "user_id", nullable = false) private int userId; public class Users implements Serializable { @Id @GeneratedValue(strategy=GenerationType.TABLE)//經過一個表來實現主鍵id的自增,這種方式不依賴於具體的數據庫,能夠解決數據遷移的問題 @Column(name = "user_code", nullable = false) private String userCode; public class Users implements Serializable { @Id @GeneratedValue(strategy=GenerationType.SEQUENCE)//經過Sequence來實現表主鍵自增,這種方式依賴於數據庫是否有SEQUENCE,若是沒有就不能用 @SequenceGenerator(name="seq_user") @Column(name = "user_id", nullable = false) private int userId;