1. 程式人生 > >@column 大欄位和瞬時欄位

@column 大欄位和瞬時欄位

大欄位    

@Lob //對應Blob欄位型別       

@Column(name = "PHOTO")       

private Serializable photo;       

@Lob //對應Clob欄位型別       

@Column(name = "DESCRIPTION")       

private String description;       

@Temporal註釋用來指定java.util.Date或java.util.Calender屬性與資料庫型別date、time或timestamp中的那一種型別進行對映。

@Temporal(value=TemporalType.TIME)

屬性對映

如果不想讓一些成員屬性對映成資料庫欄位,可以使用@Transient註釋進行標註。

@Transient

private Stringsex;

列舉物件

如果想對映列舉物件到資料庫就需要使用@Enumerated註釋進行標註。

@Enumerated(EnumType.STRING)

@Column(name="address_type")

private AddressTypetype;//地址型別

有時可能需要存放一些文字或大文字資料進資料庫,JDBC使用java.sql.Blob型別存放二進位制資料,

java.sql.Clob型別存放字元資料,這些資料都是非常佔記憶體的,

@Lob註釋用作對映這些

大資料型別,當屬性的型別為byte[],Byte[]或java.io.Serializable時,@Lob註釋對映為資料庫的Blob型別,當屬性的型別為char[],Character[]或java.lang.String時,@Lob註釋將對映為資料庫的Clob型別。

對於加了@Lob註釋的大資料型別,為了避免每次載入實體時佔用大量記憶體,有必要對該屬性進行延時載入,這是需要用到@Basic註釋。@Basic註釋的定義:FetchType屬性指定是否延時載入,預設為立即載入,optional屬性指定在生成資料庫結構時欄位能否為null。

@Lob

@Basic(fetch=FetchType.

LAZY)

@Column(name="info")

private Stringcontent;

其他:

columnDefinition屬性的使用:

1.columnDefinition可以指定建立表時一些SQL語句,比如這裡可以一次性指定,varchar長度128,且不能為空

@Table(name = "CUSTOMERS")
@Entity
public class Customer {
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Integer id;
    @Column(name = "Name")
    private String name;
    @Column(name = "Email",columnDefinition="varchar(128) not null")
    private String email;
    @Column(name = "Age")
    private int age;
    ......
}
當然,相同的結果可以通過nullable和length屬性結合實現

2.columnDefinition屬性的特殊使用:
程式語言中字串一般都用String表示,但是資料庫中varcahr數值型別有長度限制,一旦需要大文字,則需要text數值型別
但是String型別預設對映的數值型別是varchar,columnDefinition可以進行額外指定

@Table(name = "CUSTOMERS")
@Entity
public class Customer {
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Integer id;
    @Column(name = "Name")
    private String name;
    @Column(name = "Email", nullable = true, length = 128)
    private String email;
    @Column(name = "Age")
    private int age;
    @Column(name = "Remark",columnDefinition="text")
    private String remark;
    ......
}