当前位置:   article > 正文

Springboot整合JPA 多表关联:一对一 代码搭建_springbootjpa 一对一

springbootjpa 一对一

1.配置关联关系 

2.配置关联操作

  2.1单向

Student

  1. package com.jmj.springDataApp.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import javax.persistence.*;
  6. @Data
  7. @Entity
  8. @Table(name = "tb_student")
  9. @AllArgsConstructor
  10. @NoArgsConstructor
  11. public class Student {
  12. @Id
  13. @GeneratedValue(strategy = GenerationType.IDENTITY)
  14. @Column(name = "sid")
  15. private Long id;
  16. @Column(name = "sname",columnDefinition = "varchar(5)")
  17. private String name;
  18. @Column(name = "grade",columnDefinition = "int")
  19. private Integer grade;
  20. //单向关联一对一
  21. /**
  22. * cascade 设置关联操作
  23. * ALL, 所有持久化操作
  24. * PERSIST 只有插入才会执行关联操作
  25. * MERGE, 只有修改才会执行关联操作
  26. * REMOVE, 只有删除才会执行关联操作
  27. * fetch 设置是否懒加载
  28. * EAGER 立即加载(默认)
  29. * LAZY 懒加载( 直到用到对象才会进行查询,因为不是所有的关联对象 都需要用到) 必须要加事务注解 通过动态代理的方式代理的,
  30. * 当通过repository调用完查询方法,session就会关闭,一旦session关闭你就不能查询了
  31. * orphanRemoval 关联移除(通常在修改的时候会用到)
  32. * 一旦把关联的数据设置null ,或者修改为其他的关联数据, 如果想删除关联数据, 就可以设置true 设置为null就把账户删除
  33. * optional 限制关联的对象不能为null
  34. * true 可以为null(默认 ) false 不能为null
  35. * mappedBy 将外键约束执行另一方维护(通常在双向关联关系中,会放弃一方的外键约束)
  36. * 值= 另一方关联属性名
  37. */
  38. @OneToOne(cascade = {CascadeType.PERSIST,CascadeType.REMOVE},fetch = FetchType.LAZY,orphanRemoval = true)
  39. //设置外键的字段名
  40. @JoinColumn(name = "account_id")
  41. private Account account;
  42. }

Account  

  1. package com.jmj.springDataApp.pojo;
  2. import lombok.Data;
  3. import lombok.RequiredArgsConstructor;
  4. import javax.persistence.*;
  5. @Entity
  6. @Table(name = "tb_account")
  7. @Data
  8. public class Account {
  9. @Id
  10. @GeneratedValue(strategy = GenerationType.IDENTITY)
  11. private Long id;
  12. private String username;
  13. private String password;
  14. }

Test

  1. package com.jmj.springDataApp.mapper;
  2. import com.jmj.springDataApp.pojo.Account;
  3. import com.jmj.springDataApp.pojo.Student;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.transaction.annotation.Transactional;
  8. import java.util.List;
  9. import java.util.Optional;
  10. import java.util.function.Consumer;
  11. @SpringBootTest
  12. public class OneToOneTest {
  13. @Autowired
  14. private StudentPageMapper mapper;
  15. //插入
  16. @Test
  17. void name() {
  18. Account account = new Account();
  19. account.setUsername("jmjaccount");
  20. account.setPassword("123456");
  21. Student student = new Student();
  22. student.setName("jmj");
  23. student.setGrade(1);
  24. student.setAccount(account);
  25. //初始化数据
  26. mapper.save(student);
  27. }
  28. @Test
  29. @Transactional(readOnly = true)
  30. void select() {
  31. Optional<Student> byId = mapper.findById(55l);
  32. Student student = byId.get();
  33. student.setName("hkl");
  34. System.out.println(byId);
  35. }
  36. @Test
  37. void delete() {
  38. mapper.deleteById(55L);
  39. }
  40. @Test
  41. void update() {
  42. Student student = new Student(56L, "jj", 3, null);
  43. Student save = mapper.save(student);
  44. }
  45. }

2.2双向

  1. package com.jmj.springDataApp.pojo;
  2. import lombok.Data;
  3. import lombok.RequiredArgsConstructor;
  4. import javax.persistence.*;
  5. @Entity
  6. @Table(name = "tb_account")
  7. @Data
  8. public class Account {
  9. @Id
  10. @GeneratedValue(strategy = GenerationType.IDENTITY)
  11. private Long id;
  12. private String username;
  13. private String password;
  14. @OneToOne
  15. @JoinColumn(name = "student_id" )
  16. private Student student;
  17. }
  1. package com.jmj.springDataApp.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import javax.persistence.*;
  6. @Data
  7. @Entity
  8. @Table(name = "tb_student")
  9. @AllArgsConstructor
  10. @NoArgsConstructor
  11. public class Student {
  12. @Id
  13. @GeneratedValue(strategy = GenerationType.IDENTITY)
  14. @Column(name = "sid")
  15. private Long id;
  16. @Column(name = "sname",columnDefinition = "varchar(5)")
  17. private String name;
  18. @Column(name = "grade",columnDefinition = "int")
  19. private Integer grade;
  20. //单向关联一对一
  21. /**
  22. * cascade 设置关联操作
  23. * ALL, 所有持久化操作
  24. * PERSIST 只有插入才会执行关联操作
  25. * MERGE, 只有修改才会执行关联操作
  26. * REMOVE, 只有删除才会执行关联操作
  27. * fetch 设置是否懒加载
  28. * EAGER 立即加载(默认)
  29. * LAZY 懒加载( 直到用到对象才会进行查询,因为不是所有的关联对象 都需要用到) 必须要加事务注解 通过动态代理的方式代理的,
  30. * 当通过repository调用完查询方法,session就会关闭,一旦session关闭你就不能查询了
  31. * orphanRemoval 关联移除(通常在修改的时候会用到)
  32. * 一旦把关联的数据设置null ,或者修改为其他的关联数据, 如果想删除关联数据, 就可以设置true 设置为null就把账户删除
  33. * optional 限制关联的对象不能为null
  34. * true 可以为null(默认 ) false 不能为null
  35. * mappedBy 将外键约束指向另一方维护(通常在双向关联关系中,会放弃一方的外键约束)
  36. * 值= 另一方关联属性名
  37. */
  38. @OneToOne(cascade = {CascadeType.PERSIST,CascadeType.REMOVE},fetch = FetchType.LAZY,orphanRemoval = true,optional = false,mappedBy = "student")
  39. //设置外键的字段名
  40. @JoinColumn(name = "account_id")
  41. private Account account;
  42. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/530957
推荐阅读
相关标签
  

闽ICP备14008679号