当前位置:   article > 正文

JPA @OneToOne 使用_jpa onetoone

jpa onetoone

产品迭代引入JPA,记录一下初次使用 @OneToOne和遇到的坑。由于我也是边学边实操,暂时没有深入原理只有实操(饭碗要先保住),开干。。。

一、 @OneToOne 如何使用

二、可能会出现的异常情况

 一、@OneToOne如何使用

先上菜,准备好以下注解: 

  1. @OneToOne(mappedBy = "xxxx")
  2. @JoinColumn(name = "xxxx", referencedColumnName = "xxxx")
  3. @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")

举个栗子:

1个人只能拥有1个性别,这个大家都认同吧,那么现在需要定义两个实体:

Person 实体和Gender实体

  1. /**
  2. * 人 实体
  3. * 此类理解为 拥有方
  4. */
  5. public class Person{
  6. //id
  7. private String id;
  8. //姓名
  9. private String name;
  10. //性别id
  11. private Gender gender;
  12. }
  13. /**
  14. * 性别 实体
  15. * 此类理解为 被拥有方
  16. */
  17. public class Gender{
  18. //id
  19. private String id;
  20. //性别描述
  21. private desc;
  22. }

实现单向关联

  1. /** 一、在拥有方加入两个注解就完成了单向关联
  2. * @OneToOne
  3. * @JoinColumn(name = "gender_id", referencedColumnName = "id")
  4. * name和referencedColumnName 定义了关联关系
  5. * Person表的 gender_id 和 Gender表的id 关联
  6. */
  7. /**
  8. * 人 实体
  9. * 此类理解为 拥有方
  10. */
  11. public class Person{
  12. //id
  13. private String id;
  14. //姓名
  15. private String name;
  16. //性别id
  17. @OneToOne
  18. @JoinColumn(name = "gender_id", referencedColumnName = "id")
  19. private Gender gender;
  20. }
  21. /**
  22. * 性别 实体
  23. * 此类理解为 被拥有方
  24. */
  25. public class Gender{
  26. //id
  27. private String id;
  28. //性别描述
  29. private desc;
  30. }

实现双向关联

  1. /** 一、在被拥有方两行代码
  2. * @OneToOne(mappedBy = "gender")
  3. * private Person person
  4. * mappedBy 指向 被拥有方,个人理解: 被拥有方(Gender)告诉Person, 我在Person里应该映射到gender属性
  5. */
  6. /**
  7. * 人 实体
  8. * 此类理解为 拥有方
  9. */
  10. public class Person{
  11. //id
  12. private String id;
  13. //姓名
  14. private String name;
  15. //性别id
  16. @OneToOne
  17. @JoinColumn(name = "gender_id", referencedColumnName = "id")
  18. private Gender gender;
  19. }
  20. /**
  21. * 性别 实体
  22. * 此类理解为 被拥有方
  23. */
  24. public class Gender{
  25. //id
  26. private String id;
  27. //性别描述
  28. private desc;
  29. @OneToOne(mappedBy = "gender")
  30. private Person person;
  31. }

至此一对一的双向关联就完成了

漏了一个注解没解释

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")

如果双向关联出现 死循环 的现象,在Person和Gender类上分别都加上次此注解方可化解。

注意事项: 

关联的字段类型包括字段编码格式必须要保持一致

估计明后天就会使用到级联操作,明天就要用了,我还不会

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

闽ICP备14008679号