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:表示级联操作策略