@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註釋用作對映這些
對於加了@Lob註釋的大資料型別,為了避免每次載入實體時佔用大量記憶體,有必要對該屬性進行延時載入,這是需要用到@Basic註釋。@Basic註釋的定義:FetchType屬性指定是否延時載入,預設為立即載入,optional屬性指定在生成資料庫結構時欄位能否為null。
@Lob
@Basic(fetch=FetchType.
@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;
......
}