@ElementCollection 是如何存储的?
How is @ElementCollection stored?
这是我的用户实体的一部分,如您所见,它具有枚举角色
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
private String email;
private String password;
@ElementCollection(fetch = FetchType.EAGER)
private List<Role> roles;
}
缺少table角色,我只有一个链接tableuser_roles
。如果我看不到数据,数据如何存储?如果我无法编辑链接 table,如何在 PostgreSQL 中手动更改角色?
角色信息存储在user_roles
中。 @ElementCollection
的性质是,集合将映射到 table,它没有任何主键列,并且有一个 FK 列引用到其父项(即 users
)。
user_role
的角色列中的值不是您可以在某些角色主机 table 中找到其记录的任何角色 ID。它只是 Role
枚举的序数。
如果将其更改为:
@ElementCollection
@Enumerated(EnumType.STRING)
private List<Role> roles;
那么user_role中的数据就会变成:
user_id | roles
----------------
1 | ADMIN
1 | DEV
2 | DEV
3 | ADMIN
其中角色列中的值成为 Role
枚举的项目名称。
这是我的用户实体的一部分,如您所见,它具有枚举角色
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
private String email;
private String password;
@ElementCollection(fetch = FetchType.EAGER)
private List<Role> roles;
}
缺少table角色,我只有一个链接tableuser_roles
。如果我看不到数据,数据如何存储?如果我无法编辑链接 table,如何在 PostgreSQL 中手动更改角色?
角色信息存储在user_roles
中。 @ElementCollection
的性质是,集合将映射到 table,它没有任何主键列,并且有一个 FK 列引用到其父项(即 users
)。
user_role
的角色列中的值不是您可以在某些角色主机 table 中找到其记录的任何角色 ID。它只是 Role
枚举的序数。
如果将其更改为:
@ElementCollection
@Enumerated(EnumType.STRING)
private List<Role> roles;
那么user_role中的数据就会变成:
user_id | roles
----------------
1 | ADMIN
1 | DEV
2 | DEV
3 | ADMIN
其中角色列中的值成为 Role
枚举的项目名称。