大字段
@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;
......
}