@JoinColumn相关注解的使用

@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() {
    }
}
发布了24 篇原创文章 · 获赞 8 · 访问量 1876

猜你喜欢

转载自blog.csdn.net/qq_40462579/article/details/90294658