JPA+Hibernate 3.3 ——基本屬性映射

 

一、數據庫中字段的數據類型爲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策略,每次插入數據庫記錄的時候都會自增1Java代碼片斷以下:

 @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;   
相關文章
相關標籤/搜索