@JoinColumn
用来指定与所操作实体或者实体集合相关的数据库表中的列字段。
以下四个注解只能确定实体之间几对几的关联关系,并不能将实体类中的字段与数据库中的字段相关联。
目标外键,即,要关联到的字段名。
命名规则:被控方类名_被控方主键名
被@JoinColumn标注的字段为主控方字段 。
以下四个注解主被控方关系为:当前实体类字段To其它实体类字段
类似于外键。
实体类的成员变量的名称并不是与数据库表的字段一一对应,通过使用@JoinColumn注解来将成员变量与数据库字段对应。
例如,如果使用@JoinColumn(name = “user_id”)注解标注实体类中的某个成员变量,首先会在数据库该实体类对应的中,创建一个名为“user_id”的字段,该字段(或外键)自动关联至“user”表的“id”(主键),此时,对该成员变量的操作就是对数据库中该表的“user_id”的操作。
@OneToOne
一对一关系。
一般是一个成员变量对应一个字段。
例如,当前实体类中的“userInfoId”成员变量,对应“user”表中的“id”(主键):
@OneToOne
@JoinColumn(name = "user_id")
private String userInfoId;
@OneToMany
一对多关系。
一般是一个集合对应一个字段。
例如,当实体类中的“userList”成员变量,“userList”是一个装有多个"UserId"的队列,队列中的每一个元素都对应“user”表中的“id”(主键):
@OneToMany
@JoinColumn(name = "user_id")
private List<UserId> userList;
@ManyToOne
多对一关系。
一般是在逻辑上多个字段包含于一个成员变量。
例如,关键用户(keyUsers)对应多个用户(user):
@ManyToOne
@JoinColumn(name = "user_id")
private String keyUsers;
@ManyToMany
多对多关系。
一般是一个集合成员变量与另一个集合字段的关联。
例如,一个用户可以创建多个角色,但是角色也不是唯一的:
@ManyToMany
@JoinColumn(name = "user_roles")
private List<Roles>userRoles;
@xxxToxxx(fetch = FetchType.xxxx, cascade = CascadeType.xxxx)
fetch属性
用于设置从数据库读取数据。
FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。
cascade属性
Hibernate级联操作。
有如下取值
public enum CascadeType {
ALL, //拥有以下所有权限
PERSIST, //级联新增,当当前实体类新增信息时,与之相关的字段也会跟着增加,但是被动的一方新增信息时,则会抛出异常
MERGE, //级联更新(合并)操作,当前实体类更新与之相关的也跟着更新
REMOVE, //级联删除,当前实体被删除与之相关的也会被删除
REFRESH, //级联刷新,当重新获取某个对象时同时也重新获取与之相关的对象
DETACH; //级联脱管,如果要删除某个实体类,但是他有外键无法删除,此操作会撤销所有相关的外键关联
private CascadeType() {
}
}