@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 枚举的项目名称。