Spring Boot 如何将@JoinTable设为哈希Map?

olhwl3o2  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(156)

我有以下实体:

  • User.java*:
  1. @AllArgsConstructor
  2. @NoArgsConstructor
  3. @Getter
  4. @Setter
  5. @Entity
  6. @Table(name = "user")
  7. public class User {
  8. @Id
  9. @GeneratedValue(strategy = GenerationType.IDENTITY)
  10. private Long id;
  11. private String username;
  12. // this is relationship I want but being a map
  13. // @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
  14. // @JoinTable(
  15. // name = "user_roles",
  16. // joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
  17. // inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id")
  18. // )
  19. @ElementCollection
  20. @MapKeyColumn(name = "roleName")
  21. @Column(name = "roleValue")
  22. @CollectionTable(
  23. name = "user_roles",
  24. joinColumns = @JoinColumn(name = "user_id")
  25. )
  26. Map<String, String> attributes = new HashMap<>();
  27. }

字符串

  • 角色.java*:
  1. @AllArgsConstructor
  2. @NoArgsConstructor
  3. @Generated
  4. @Setter
  5. @Entity
  6. @Table(name = "role")
  7. public class Role {
  8. @Id
  9. @GeneratedValue(strategy = GenerationType.IDENTITY)
  10. private Long id;
  11. private String name;
  12. }


不,我试图有一个表,user_roles,其中表将(long user_id,long role_id,string userName,string userValue)。基本上,我可以将其用作Map(例如MapUSER_ROLE-> USER_ROLE,以便在前端或任何地方可以通过其名称访问角色,但是我不知道怎么做,我知道@JoinTable@ElementCollection都创建了一个表,那么我如何合并它们(或者只是创建一个可以在map中使用的表)?

osh3o9ms

osh3o9ms1#

我认为你可以解决这个问题,而不需要复杂的Map,只需要编写显式的转换:

  1. @JsonIgnore
  2. @ManyToMany
  3. @JoinTable( /* the mapping how it is */ )
  4. private Set<Role> userRoles;
  5. @Transient
  6. public Map<String, String> getAttributes() {
  7. // convert userRoles to Map as you wish
  8. }

字符串
因为正如我所理解的,您希望从useruser_rolesrole表中收集信息,所以您的请求无论如何都将有两个联接。

相关问题