1.@Entity 标识这个pojo是一个实体
2.@Table(name=users)设置表名
3.@Id 设置主键
4.@Column 设置字段类型
- name : 表中对应的字段名
- unique : 是否唯一
- nullable: 是否为空
- inserttable:是否可以插入
- updateable:是否可以更新
- columnDefinition: 定义建表时创建此列的DDL
- secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字
- precision 设置精度 scale 保留的小数位
5.@OrderBy : 排序
6.@GeneratedValue(strategy=默认值)strategy的取值:
-
GenerationType.AUTO 由JPA容器自动生成
-
GenerationType.IDENTITY 主键自增的方式(依赖于具体的数据库,不支持主键自增,不能够使用)
-
GenerationType.TABLE 通过表来实现主键id自增的方式(不依赖数据库,解决数据迁移的问题)
-
GenerationType.SEQUENCE 通过主键实现主键自增的方式(依赖于具体的数据库,数据库没有 SEQUENCE ,不能够使用)
7.@SequenceGenerator 如果实体表示的生成策略是GenerationType.SEQUENCE ,必须提供该注解, 它的参数描述了使用序列号生成实体标识的具体细节
- name : 它表示了 SequenceGenerator 注释在 OpenJPA 容器中的唯一名称
8.一对多映射关系:
T_One实体:
@OneToMany(cascade = CascadeType.ALL, mappedBy = “用在被维护端”) 指向多的那方的pojo的关联外键字段
-
cascade 级联操作
-
CascadeType.PERSIST:级联持久化,也就是级联保存。比如一个学生有很多门成绩,保存学生了,那么也就会级联保存各门成绩信息
-
CascadeType.REMOVE:级联删除,删除学生了,那么学生的成绩也从数据库中删除
-
CascadeType.MERGE:级联合并,修改学生成绩信息了,那么修改的成绩信息会保存到数据库中,和上面persist的区别类似于put和post的区别
-
CascadeType.DETACH:级联游离,要想删除某一条学生信息,但学生的id在成绩表中作为外键,无法直接删除
-
CascadeType.REFRESH:级联刷新
-
CascadeType.ALL:上面所有的结合,慎用
T_Many实体:
@JoinColumn(name = “ONE_ID”, referencedColumnName = “ONE_ID”)//设置对应数据表的列名和引用的数据表的列名
@ManyToOne//设置在“一方”pojo的外键字段上
9.多对多映射关系:
ManyA实体:
@ManyToMany
@JoinTable(name = “格式是:主控方_被控方(关系表)”, joinColumns = {@JoinColumn(name = “MANYA_ID(中间表的主键)”, referencedColumnName = “MANYA_ID”)}, inverseJoinColumns = {@JoinColumn(name = “MANYB_ID”, referencedColumnName = “MANYB_ID”)})
- jointable中name指定表名,然后指定外键,joinColumns是主操作表的中间表列,可以有好几个,而inverseJoinColumns是副操作表的中间表列,也就是student作为主操作表
ManyB实体:
@ManyToMany(mappedBy = “被维护端”)
10.一对一映射关系
A实体:
@OneToOne(cascade = CascadeType.ALL, mappedBy = “oneA”)//主Pojo这方的设置比较简单,只要设置好级联和映射到从Pojo的外键就可以了。
B实体:
@JoinColumn(name = “ONEA_ID”, referencedColumnName = “ONEA_ID”, insertable = false, updatable = false)//设置从方指向主方的关联外键,这个ONEA_ID其实是表T_ONEA的主键
@OneToOne