
文章插图

文章插图
通过关联,会在两个表中进行插入,删除也是会删除两个表中数据 。
一对多
@OneToMany:作用:建立一对多的关系映射属性:targetEntityClass:指定多的多方的类的字节码mappedBy:指定从表实体类中引用主表对象的名称 。cascade:指定要使用的级联操作fetch:指定是否采用延迟加载orphanRemoval:是否使用孤儿删除
创建一个文章表来实现一对多关系,一个用户可以发表多个文章,一个文章只属于一个用户,因此在用户表中是一对多,在文章表就是多对一 。通过@ManyToOne注解完成关系package com.jpa.demo.domain;import lombok.Data;import javax.persistence.*;/** * @author: lyd * @description: 文章表 * @Date: 2022/10/2 */@Data@Entity@Table(name="yun_article")public class Article {@Id@Column(name = "article_id")@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false, length = 50) // 映射为字段,值不能为空private String title;@Basic(fetch = FetchType.LAZY) // 懒加载@Column(nullable = false) // 映射为字段,值不能为空private String content;@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false)//可选属性optional=false,表示user不能为空 。删除文章,不影响用户@JoinColumn(name="user_id")//设置在article表中的关联字段(外键)private User user;}
在user实体这边就是一对多关系,并且通过注解完成 。@OneToMany(mappedBy = "user",cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联保存、更新、删除、刷新;延迟加载 。当删除用户,会级联删除该用户的所有文章//拥有mappedBy注解的实体类为关系被维护端private Set<Article> articles;
测试,需要创建ArticleRepository@Testvoid OneToMany() {User user = userRepository.getById(1L);Article article1=new Article();article1.setTitle("如何写好博客");article1.setContent("如何写好博客");article1.setUser(user);articleRepository.save(article1);Article article2=new Article();article2.setTitle("如何更进一步学习");article2.setContent("不断地卷");article2.setUser(user);articleRepository.save(article2);}
运行结果
文章插图
数据库中

文章插图
多对多JPA中使用@ManyToMany来注解多对多的关系,由一个关联表来维护 。这个关联表的表名默认是:主表名+下划线+从表名 。(主表是指关系维护端对应的表,从表指关系被维护端对应的表) 。这个关联表只有两个外键字段,分别指向主表ID和从表ID 。字段的名称默认为:主表名+下划线+主表中的主键列名,从表名+下划线+从表中的主键列名 。通过@JoinTable来实现中间表 。创建角色表
package com.jpa.demo.domain;import lombok.Data;import javax.persistence.*;import java.io.Serializable;import java.util.Set;/** * @author: lyd * @description: 角色表 * @Date: 2022/10/2 */@Data@Entity@Table(name = "sys_role")public class Role implements Serializable {@Id@Column(name = "role_id")@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@ManyToMany(mappedBy = "roles")private Set<User> users;private String name;@Column(name = "level")private Integer level = 3;private String description;}
在用户表中@ManyToMany@JoinTable(name = "sys_users_roles",joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "user_id")},inverseJoinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "role_id")})private Set<Role> roles;
测试@Testvoid ManyToMany() {Role role = new Role();role.setName("USER");role.setLevel(2);role.setDescription("管理员");roleRepository.save(role);Set<Role> roles = new HashSet<>();roles.add(role);User user = new User();user.setPassword("lyd_code");user.setNickName("怒放德德");user.setUsername("lyd_code");user.setRoles(roles);User save = userRepository.save(user);System.out.println(save);}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 如何正确饲养小松鼠
- 炖汤飞水啥意思
- 如何跟女生如何聊天
- 书旗小说今天推荐的小说有哪些
- 三星C7000怎么打开USB
- 形容多而密的词语
- 电脑屏幕144hz是什么意思
- 什么是猪下青
- 形容腊梅花的优美句子
- 进入终面意味着什么