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

olhwl3o2  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(63)

我有以下实体:

  • User.java*:
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;

 // this is relationship I want but being a map
 // @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
//    @JoinTable(
//            name = "user_roles",
//            joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
//            inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id")
//    )

    @ElementCollection
    @MapKeyColumn(name = "roleName")
    @Column(name = "roleValue")
    @CollectionTable(
            name = "user_roles",
            joinColumns = @JoinColumn(name = "user_id")
    )
    Map<String, String> attributes = new HashMap<>();
}

字符串

  • 角色.java*:
@AllArgsConstructor
@NoArgsConstructor
@Generated
@Setter
@Entity
@Table(name = "role")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}


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

osh3o9ms

osh3o9ms1#

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

@JsonIgnore
@ManyToMany
@JoinTable( /* the mapping how it is */ )
private Set<Role> userRoles;

@Transient
public Map<String, String> getAttributes() {
    // convert userRoles to Map as you wish
}

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

相关问题