如何在SpringJPA中正确Map4个表

kknvjkwl  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(266)

我有四张table
区域:它是一个目录,其中包含组织(父级)的所有部门
子区域:它是一个目录,其中在目录(区域),即子目录之前,所有子区域都属于该目录
个人:组织所有员工所在的目录
personal area(个人区域):这是一个表,其中包含前面描述的表之间的所有关系
业务逻辑很简单,员工可以属于多个区域中的一个,每个区域只能属于一个子区域。
这是我的关系

这些是我的实体
个人的

  1. @Entity
  2. @Table(name = "personal", catalog = "almacen", schema = "")
  3. public class Personal {
  4. @Id
  5. @GeneratedValue(strategy = GenerationType.IDENTITY)
  6. @Basic(optional = false)
  7. @Column(name = "id")
  8. private Long id;
  9. @Basic(optional = false)
  10. @NotNull
  11. @Size(min = 1, max = 30)
  12. @Column(name = "curp")
  13. private String curp;
  14. @Basic(optional = false)
  15. @NotNull
  16. @Size(min = 1, max = 200)
  17. @Column(name = "nombre")
  18. private String nombre;
  19. @JsonIgnore
  20. @OneToMany(mappedBy = "personal")
  21. private Set<PersonalArea> registrations = new HashSet<>();
  22. }

个人区域

  1. @Getter
  2. @Setter
  3. @Entity
  4. @Table(name = "personal_area", catalog = "almacen", schema = "")
  5. @XmlRootElement
  6. public class PersonalArea {
  7. @Id
  8. @GeneratedValue(strategy = GenerationType.IDENTITY)
  9. @NotNull
  10. private Long id;
  11. @ManyToOne
  12. @JoinColumn(name = "personal_id")
  13. private Personal personal;
  14. @ManyToOne
  15. @JoinColumn(name = "area_id")
  16. private Area area;
  17. @ManyToOne
  18. @JoinColumn(name = "subarea_id")
  19. private subArea subArea;
  20. private Date fechaCreacion;
  21. }

地区

  1. @Getter
  2. @Setter
  3. @Entity
  4. @Table(name = "area", catalog = "almacen", schema = "")
  5. @XmlRootElement
  6. public class Area {
  7. @Id
  8. @GeneratedValue(strategy = GenerationType.IDENTITY)
  9. @NotNull
  10. private Long id;
  11. private String nombreArea;
  12. @JsonIgnore
  13. @OneToMany(mappedBy = "area")
  14. private Set<PersonalArea> registrations = new HashSet<>();
  15. }

分区

  1. @Getter
  2. @Setter
  3. @Entity
  4. @Table(name = "sub_area", catalog = "almacen", schema = "")
  5. public class subArea {
  6. @Id
  7. @GeneratedValue(strategy = GenerationType.IDENTITY)
  8. @NotNull
  9. private Long id;
  10. private Long idArea;
  11. private String nombre;
  12. @JsonIgnore
  13. @OneToMany(mappedBy = "personal")
  14. private Set<PersonalArea> registrations = new HashSet<>();
  15. }

事实上,我得到了这样的东西,正如你所看到的,json有两倍于同一个人,他属于两个区域,每个区域一个子区域。。。没关系,但我不想要这个

  1. {
  2. "items": [{
  3. "id": 1,
  4. "personal": {
  5. "id": 1,
  6. "curp": "AEMM680119HHGRRR03",
  7. "nombre": "MARIO RUBIZEL",
  8. "primerApellido": "ARTEAGA",
  9. "segundoApellido": "MORALES",
  10. "telefono": "7711263949",
  11. "fechaCreacion": null,
  12. "fechaModificacion": null
  13. },
  14. "area": {
  15. "id": 2,
  16. "nombreArea": "PERSONAL ADMINISTRATIVO"
  17. },
  18. "subArea": {
  19. "id": 1,
  20. "idArea": 2,
  21. "nombre": "CONTROL ESCOLAR"
  22. },
  23. "fechaCreacion": "2021-06-24T16:26:49.000+00:00"
  24. },
  25. {
  26. "id": 2,
  27. "personal": {
  28. "id": 1,
  29. "curp": "AEMM680119HHGRRR03",
  30. "nombre": "MARIO RUBIZEL",
  31. "primerApellido": "ARTEAGA",
  32. "segundoApellido": "MORALES",
  33. "telefono": "7711263949",
  34. "fechaCreacion": null,
  35. "fechaModificacion": null
  36. },
  37. "area": {
  38. "id": 5,
  39. "nombreArea": "PERSONAL EXTERNO"
  40. },
  41. "subArea": {
  42. "id": 2,
  43. "idArea": 5,
  44. "nombre": "FOTOCOPIADO"
  45. },
  46. "fechaCreacion": "2021-06-24T16:26:49.000+00:00"
  47. }
  48. ]
  49. }

我需要像这样的json:像孩子一样只显示一次个人区域和y分区

  1. {
  2. "items": [{
  3. "id": 1,
  4. "personal": {
  5. "id": 1,
  6. "curp": "AEMM680119HHGRRR03",
  7. "nombre": "MARIO RUBIZEL",
  8. "primerApellido": "ARTEAGA",
  9. "segundoApellido": "MORALES",
  10. "telefono": "7711263949",
  11. "fechaCreacion": null,
  12. "fechaModificacion": null
  13. },
  14. "area": [{
  15. "id": 1,
  16. "nombreArea": "DIRECTOR",
  17. "subArea": {
  18. "id": 1,
  19. "idArea": 2,
  20. "nombre": "CONTROL ESCOLAR"
  21. }
  22. },
  23. {
  24. "id": 5,
  25. "nombreArea": "PERSONAL EXTERNO",
  26. "subArea": {
  27. "id": 2,
  28. "idArea": 5,
  29. "nombre": "FOTOCOPIADO"
  30. }
  31. }
  32. ],
  33. "fechaCreacion": "2021-06-24T16:26:49.000+00:00"
  34. }
  35. ]
  36. }

提前谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题