JPA annotation笔记

annotation可以写在子属性上或者属性的getter方法上
@MappedSuperclass:用在父类上面,继承后,多个继承,生成多个表。而@Entity,则继承后,多个类继承,只会生成一个表

@Inherited:允许子类继承父类的注解

@Documented:在生成javadoc文档的时候将该Annotation也写入到文档中。

@Target:表示的是这个Annotation可以应用在哪里:@Target({ElementType.FIELD,ElementType.METHOD}):只能用在子属性上、方法上的限制,ElementType.TYPE:表示只能用在类上

@Retention(RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.

@interface:自定义Annotation

@Entity:映射实体
实体必须有一个无参的构造方法;
实现Serializable接口,建议每一个Entity都实现该接口;

@Id:标记主键
@GeneratedValue:指明主键生成策略
JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。
@GeneratedValue(strategy = GenerationType.AUTO)

@Column:所持久化属性所映射表中的字段
name 可选,字段名(默认值是属性名)
unique 可选,是否在该字段上设置唯一约束(默认值false)
nullable 可选,是否设置该字段的值可以为空(默认值false)
insertable 可选,该字段是否作为生成的insert语句中的一个字段(默认值true)
updatable 可选,该字段是否作为生成的update语句中的一个字段(默认值true)
columnDefinition 可选: 为这个特定字段覆盖sql DDL片段 (这可能导致无法在不同数据库间移植)
table 可选,定义对应的表(默认为主表)
length 可选,字段长度(默认值255)
precision 可选,字段数字精精度(默认值0)
scale 可选,如果字段数字刻度可用,在此设置(默认值0)

@Enumerated标注枚举类型
  因为枚举类型的有名称和值两个属性,所以在持久化时可以选择持久化名称或是持久化值。通过EnumType来定义
  @Enumerated(EnumType.STRING)持久化的为枚举类型的名称
  @Enumerated(EnumType.ORDINAL)持久化的为枚举类型的值(默认)

@Temporal:日期注解
1) DATE :等于java.sql.Date
2) TIME :等于java.sql.Time
3) TIMESTAMP :等于java.sql.Timestamp
1.日期:
@Temporal(TemporalType.DATE)
@Column(name = "applyDate", nullable = false, length = 10)
public Date getApplyDate() {
  return applyDate;
}
在页面端取值:2014-09-23

2.时间:
@Temporal(TemporalType.TIME)在页面端取值:22:50:30

3.日期和时间(默认):
@Temporal(TemporalType.TIMESTAMP)
在页面端取值:2014-09-23 22:51:34:000

@OneToOne:一对一

@OneToMany:一对多
映射策略
# 外键关联:两个表的关系定义在一个表中;
# 表关联:两个表的关系单独定义一个表中通过一个中间表来关联。
casade:
CascadeType.PERSIST (级联新建)
·CascadeType.REMOVE (级联删除)
·CascadeType.REFRESH (级联刷新)
·CascadeType.MERGE (级联更新)中选择一个或多个。
·还有一个选择是使用CascadeType.ALL ,表示选择全部四项
targetEntity:many端
fetch:该实体的加载方式,有两种:LAZY和EAGER,默认为LAZY
mappedBy:属性用于双向关联实体时使用,由One的一方指向Many的一方,并且,这个属性应该等于Many的一方中含有One类的属性的属性名,否则会出错啦
在多端加入:orphanremoval=true(孤值删除)配置

@ManyToMany:多对多



@JoinColumn标记不仅能够与@OneToOne使用,也可以@ManyToOne或@ManyToMany标记同时使用
@JoinColumn与@Column标记一样,是用于注释表中的字段的。它的属性与@Column属性有很多相同之处
@JoinColumn与@Column相区别的是:@JoinColumn注释的是保存表与表之间关系的字段,它要标注在实体属性上。而@Column标注的是表中不包含表关系的字段。

你可能感兴趣的:(annotation,jpa)