有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java枚举集JPA2.0

请看一下我的前一个问题以了解背景

List of enum vs. class of booleans

然而,我的问题是枚举集如何与JPA2.0和数据库一起工作。因为我可能会将这些值保存为字符串(因为我不希望冒险丢失映射),所以一个枚举集say>;与bool类相比,集合中的20个枚举可能是一种非常无效的数据存储方式

考虑具有不同角色的用户表:

user | password | role (enum)
adm    1223       admin, guest, www, lab, elevator, ap, // Might be more than > 20
sam    0000       admin

我应该选择什么?你有什么想法吗

致意


共 (2) 个答案

  1. # 1 楼答案

    如果你想以二进制形式存储相对较小的信息,我会选择EnumSet,如果你想按类型查询,我会选择@ElementCollection

  2. # 2 楼答案

    上面的数据库设计不是为用户存储角色的方式。它不是标准化的(因为一列中有多个值),因此很难查询。例如,您将如何进行查询以了解具有guestap角色的所有用户

    将设计更改为这样:

    user table : id, name, passord
    role table: id, name
    user_role join table: user_id, role_id
    

    在JPA术语中,您只需要一个User实体、一个Role实体和这些实体之间的ManyToMany关联:一个用户有0个、1个或多个角色,一个角色由0个、1个或多个用户持有