数据库中多对一(反过来看则是一对多)的关系是最常见的一种关联。可以通过外键关联建立这种关系,也可以单独定义一张表来保存关系。
这里我们考虑外键关联的情况,比如Comment
和Blog
就是多对一关系,Blog
和User
也是多对一关系。
以Blog
和Comment
为例,他们之间的关系可以如下定义:
@ManyToOne
定义了多对一关系,如果生成DDL的话,会默认生成Comment
表到Blog
表的一个外键关联。
与@OneToOne
类一样,@JoinColumn
可以与之一同使用,设置外键关联字段的名称和约束。
@ManyToOne
的属性选项与@OneToOne
是类似的:
targetEntity
属性表示默认关联的实体类型,默认为当前标注的实体类。
cascade
属性表示级联操作策略:
CascadeType.PERSIST
:级联新建CascadeType.REMOVE
:级联删除CascadeType.REFRESH
: 级联刷新CascadeType.MERGE
: 级联更新CascadeType.ALL
:表示选择全部四项fetch
属性表示实体的加载方式,有LAZY
和EAGER
两种取值。
optional
属性表示关联的实体是否能够存在null
值,默认为true
,表示可以存在null
值。如果为false
,则要同时配合使用@JoinColumn
标注。
如果在Blog
中也定义一个Comment
类型的成员变量,则两者形成了双向关系,
@OneToMany
标注的实体类属性(或者其getter
)类型为集合类型,fetch
那么默认为LAZY
。
mappedBy = "blog"
表示,当前类(Blog
)是通过Comment
中blog
属性与之建立关联的。记住只要是使用了mappedBy
,就是关系被维护方。
登录发表评论 登录 注册