@Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface Id {}
@Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface GeneratedVaule { GenerationType strategy() default AUTO; String generator() default ""; }strategy屬性表示生成主鍵的策略,定義在枚舉類型GenerationType中:
public enum GenerationType { TABLE, SEQUENCE, IDENTITY, AUTO }
注:double和float浮點類型和它們對應的封裝類不能做爲主鍵,由於判斷是否惟一是經過equals方法判斷的,浮點型的精度太大,不能準確地匹配 java
三、自增主鍵
MySQL實現: sql
create table customer ( id int(20) not null auto_increment, )而oracle可能須要建立Sequence來實現自增。
@Entity @Table(name="customer") public class CustomerEO implements java.io.Serializable { @Id @GeneratedVaule(strategy = GenerationType.AUTO) private Integer id; ... }
create table tb_generator ( id int(20) unsigned not null auto_increment, gen_name varchar(255) not null, gen_vaule int(20) not null, primary key (id) ) insert into tb_generator (gen_name, gen_value) values ('CUSTOMER_PK','1'); insert into tb_generator (gen_name, gen_value) values ('CONTACT_PK','100')數據庫以下:
id | gen_name | gen_value |
1 | CUSTOMER_PK | 1 |
2 | CONTACT_PK | 100 |
@Id GeneratedValue(strategy = GenerationType.TABLE, generator="customer_gen") @TableGenerator(name = "customer_gen", table="tb_generator", pkColumnName="gen_name", vauleColumnName="gen_value", pkColumnValue="CUSTOMER_PK", allocatonSize=1 ) private Integer id;@TableGenerator標記屬性定義以下:
@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface TableGenerator { String name(); String table() default ""; String catalog() default ""; String schema() default ""; String pkColumnName() default ""; String valueColumnName() default ""; int initiaValue() default 0; int allocationSize() default 50; UniqueConstraint[] uniqueConstraints() default(); }
五、Sequence生成器(@Sequence)
SQL腳本: 數據庫
create sequence customer_sequence start with 1 increment by 10
這個sequence從1開始,每次增加10(採用MySQL數據庫中不支持Squence)
具體設置: oracle
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="customer_seq") @SequenceGenerator(name="customer_seq", sequenceName="customer_sequence") private Integer id;
@SequenceGenerator屬性定義以下: ide
@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface SequenceGenerator { String name(); String sequenceName() default ""; int inittialVaule() default 0; int allocationSize() default 50; }
六、Identity生成器 fetch
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id;
八、映射Blob和Clob(@Lob)
加載圖片或長文本時,使用@Lob標記: spa
@Lob @Basic(fetch=FetchType.LAZY) private byte[] image;
@Temporal(TemporalType.TIME) private java.util.Date createTime; @Temporal(TemporalType.DATE) private java.util.Date birthday;
public @interface Temporal { TemporalType value() default TIMESTAMP; }
public enum TemporalType { DATE, // java.sql.Date TIME, // java.sql.Time TIMESTAMP // java.sql.TimeStamp }
@Transient private String property;表示該實體內的"property"屬性設置成非持久化的