我有以下实体:
- 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中使用的表)?
1条答案
按热度按时间osh3o9ms1#
我认为你可以解决这个问题,而不需要复杂的Map,只需要编写显式的转换:
字符串
因为正如我所理解的,您希望从
user
、user_roles
和role
表中收集信息,所以您的请求无论如何都将有两个联接。