JPA:Java persistence API
JPA注解是JavaEE的标准和规范
JPA是标准接口,Hibernate是实现,优先使用JPA注解。
一:类级别注解
1:@Entity映射实体类
name属性对应数据库中的表(一般不写通过@Table写)
注意:使用@Entity时必须制定实体类的主键属性。
2:@Table映射实体类在数据库中的表
name属性(name=“表名”)表明和实体类名相同时不用写。
3:@Embeddable
表示并非实体类(Entity),不会映射一张表,可以嵌入到另一个实体类(Entity)中作为属性存在。
二:属性级别注解
1:@Id必须的
定义了映射到数据库表中的主键属性(一个或多个)
注意:多个主键属性的实体类必须实现serializable接口。
2:@GeneratedValue(strategy= ,generator= )
定义主键生成策略
strategy主键生成策略,取值有:1)GenerationType.AUTO(根据底层数据库自动选择,默认值)
2)GenerationType.IDENTITY(根据数据库中的Identity字段生成)
3)GenerationType.SEQUENCE(使用序列来决定,Oracle和DB2支持但无自动增长类型)
注意:主键为String时,要手动添加主键,不能用JPA的主键生成策略,要通过generator来指定主键生成器,如:
@GeneratedValue(generator= “名” )
@GenericGenerator(name=“名”,strategy=“assigned”)
3:@Column可将属性映射到列
常用属性:name数据库中字段的名、nullable能否为空、unique该字段是否唯一标识(默认为false)、length长度、
insertable该字段是否出现在insert语句中,默认true
updateable...............................update..............................(可设置一些属性一经填写就不能修改,设为false)
4:一对一单项外键
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name=“外键”,unique=“true”)
(有外键的一般作为主控方)
注意:保存的时候要先保存外键对象,再保存主表对象
5:一对一双向外键
被控方
@OneToOne(mappedBy=“主控方持有的北控方的实例化对象”)
交给对方来控制
6:多对一
一般多方作为主控方
多方@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)积极地抓取策略
@JoinColumn(name=“外键”,referencedColumnName=“这个外键在数据库中的名”)
一方基本上差不多不过可以把fetch的值改为LAZY
双向的话:多方不变,一方可以简写@OneToMany(mappedBy=“对方持有的我方的实例化对象”)
注意:写简写时要保证多方的已经进行了映射,双方不能都是简写。
7:多对多
其中一方(主控方):@ManyToMany
@JoinTable(
name=“关联表”
joincolumns=@JoinColumn(name=“关联表中指向自己的外键”)
inverseJoinColumns=@JoinColumn(name=“关联表中指向对方的外键”)
)
被控方:(简写)@ManyToMany(mappedBy=“对方持有的我放的实例化对象”)