【发布时间】:2013-07-19 15:16:07
【问题描述】:
我们的应用中有以下情况:
- 我们有
UserGroups - 这些可以由用户创建
- 用户可以将一些
Users 映射到给定的UserGroup(n:m 关系)
现在我们需要一些特殊的UserGroups,我们可以在 Java 代码中访问它们。所以当这一切都完成后,用户应该会看到他自己创建的UserGroups 和我们的硬编码组(当然不能删除)的混合。
第一个想法是在创建数据库时将这些额外的组放入数据库中,并简单地依赖它们存在的事实,但我认为这是不好的做法。 (因为删除或重命名会导致系统崩溃)
第二个想法是为这些特殊群体提供enum。这会很好。但当然你不能扩展一个枚举并在其中放置额外的值。
我认为,它应该是代码中的一些枚举,我们可以在其中放置硬编码组(以便于引用),并且它必须以某种方式连接到数据库,因此用户可以进行他的 User <-> UserGroup 映射(例如他自己创建的团体和我们的特殊团体)。
所以我们需要别的东西,但是什么?
编辑:
我们现在选择了一种替代方案作为解决方案,它不会干扰正常数据库设计:
USER GROUP_USER GROUP ACTION
-------- ---------------- --------- --------------
id | ... groupId | userId id | name groupId | enum
如您所见,我们并没有尝试将一些静态组放在组表中,而是现在我们将这些内部操作公开给用户界面,现在用户可以说:“操作 A 属于组 X ”。这有几个优点:用户可以选择组的名称,也可以使用多个组。
所以ACTION 表基本上是@CollectionOfElements 在GROUP 实体内。
这不是上述问题的确切解决方案,但在我们的例子中,它以一种很好的方式解决了问题,这就是;)
【问题讨论】:
标签: database spring hibernate enums extends