@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"属性设置成非持久化的