1、@Entity
作用:设置一个类为实体类

@Entity //标识这个pojo是一个jpa实体   

public class JailZbzqQuestionModel extendsBaseModel{ }

2、@Table
作用:设置实体类对应的表,常与@Entity一起使用
参数:name制定表名,不写的话,为实体类的类名

@Entity
@Table(name= "ZBZQ_JAIL_QUESTION")
public class  JailZbzqQuestionModel extendsBaseModel{ }

3、@Id
作用:设置对象标识符

@Id
@Column(name="ID",nullable=false, updatable=false, length=32)
protected String id;

4、@GeneratedValue
作用:设置标识符的生成策略,常与@Id一起使用
参数:strategy指定具体的生成策略

方式一:@GeneratedValue(strategy=GenerationType.AUTO)也是默认策略,即写成@GeneratedValue也可。
类似于hibernate的native策略,生成方式取决于底层的数据库

方式二:@GeneratedValue(strategy =GenerationType.IDENTITY)指定“自动增长”策略,适用于MySQL

方式三:@GeneratedValue(strategy =GenerationType.SEQUENCE, generator = "seq_tbl_user")指定“序列”策略,使用于Oracle

方式四:TABLE:使用一个特定的数据库表格来保存主键

(TABLE比较复杂,这里不讲解)

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID",nullable=false, updatable=false, length=32)
protected String id;

5、@Column
作用:设置列

参数:
name:指定列名
unique:指定唯一约束
nullable:指定是否允许为空

inserttable:是否可以插入  
updateable:是否可以更新

columnDefinition:定义建表时创建此列的DDL
length:长度

@Column(name= "QUESTION_UNIT", length = 50, nullable = true)

private String questionUnit;

@Column(name = "DESC",columnDefinition="TEXT", nullable =true)

private String desc;

6、@Temporal
作用:设置日期时间

方式一:@Temporal(TemporalType.DATE)映射为日期//       birthday date(只有日期)
方式二:@Temporal(TemporalType.TIME)映射为日期// birthday time(是有时间)
方式三:@Temporal(TemporalType.TIMESTAMP)映射为日期//birthdaydatetime(日期+时间)

@Temporal(TemporalType.TIMESTAMP)

@Column(name= "REG_DATE", nullable =true)

private Date regDate;

7、@Lob
作用:设置大数据类型

@Lob

@Column(name= “TEXT",nullable = true)

privateString text;   //text  longtext类型

8、@Transient
作用:修饰的字段不会被持久化

@Transient

private Date startDate;
9、 @OneToMany(fetch=FetchType,cascade=CascadeType) 


@ OneToMany 描述一个一对多的关联 , 该属性应该为集体类型 , 在数据库中并没有实际字段 . 



fetch: 表示抓取策略 , 默认为 FetchType.LAZY , 因为关联的多个对象通常不必从数据库预先读取到内存 


cascade:

例:订单和订单项就是一对多的关系

@Entity
 @Table(name = "tb_order")
 @SuppressWarnings("serial")
 public class Order  implementsjava.io.Serializable{……….
//mappedBy="order":指明Order类为双向关系维护端,负责外键的更新
@OneToMany(cascade =CascadeType.ALL, fetch =FetchType.LAZY,mappedBy = "order")
 private Set<OrderItem> items = newHashSet<OrderItem>();……………
}
@Entity
 @Table(name = "tb_orderitem")
 @SuppressWarnings("serial")
 public class OrderItem implementsjava.io.Serializable{…………………….
//optional=true:可选,表示此对象可以没有,可以为null;false表示必须存在
@ManyToOne(cascade = {CascadeType.REFRESH,CascadeType.MERGE }, optional = true)
 @JoinColumn(name = "order_id")
 private Order order;………….
}


表示级联操作策略 , 对于 OneToMany 类型的关联非常重要 , 通常该实体更新或删除时 , 其关联的实体也应当被更新或删除


10、@ManyToOne(fetch=FetchType,cascade=CascadeType) 
@ManyToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键 
optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true 
fetch:表示抓取策略,默认为FetchType.EAGER 
cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作 
targetEntity:表示该属性关联的实体类型.该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity.

11、11、@OneToOne(fetch=FetchType,cascade=CascadeType) 
@OneToOne描述一个一对一的关联 
fetch:表示抓取策略,默认为FetchType.LAZY 
cascade:表示级联操作策略