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
我应该选择什么?你有什么想法吗
致意
# 1 楼答案
如果你想以二进制形式存储相对较小的信息,我会选择
EnumSet
,如果你想按类型查询,我会选择@ElementCollection
# 2 楼答案
上面的数据库设计不是为用户存储角色的方式。它不是标准化的(因为一列中有多个值),因此很难查询。例如,您将如何进行查询以了解具有
guest
或ap
角色的所有用户将设计更改为这样:
在JPA术语中,您只需要一个
User
实体、一个Role
实体和这些实体之间的ManyToMany
关联:一个用户有0个、1个或多个角色,一个角色由0个、1个或多个用户持有