我们都可能看到像JIRA这样的应用程序,或者许多CRM或其他应用程序允许其用户为实体定义自己的自定义字段,并使用它做各种各样的事情,比如强制要求,验证它们的值和等等。
我想在我们正在创建的产品中做到这一点。
假设我们的产品允许用户创建他/她自己的项目。项目具有预定义的属性,例如
现在,作为用户,我想将以下自定义字段添加到我的项目
理想情况下,他应该能够在我的产品中创建一个自定义字段,以捕获以下详细信息:
同样,我想允许这个功能不仅可以向项目添加自定义属性,还可以向其他一些实体添加自定义属性。
这是我们正在使用的技术堆栈,到目前为止我们已经很好用。
我如何处理此要求?我希望接受以下方面的教育:
我在这里已经阅读了几个问题,特别是这个
Adding custom fields in my application
读到这个,我可以想出我可以使用NoSQL数据库来实现这个功能。虽然我可以做到这一点,但我想知道是否有任何方式可以在我目前的技术堆栈中实现这一点,以便在我的产品发展的这个阶段不会引入新的东西。
如果我的问题没有框架或措辞不当,我感到非常抱歉。我对这些技术比较陌生,并希望了解每一项挑战。
谢谢, 斯利拉姆
答案 0 :(得分:0)
您可以使用Collection mappings根据不同的用户保存不同的属性。将额外字段保存为map,其中attribute-name将是KEY,属性值将是地图的VALUE。
@ElementCollection
Map<String, String> data;
此外,您可能希望将地图的密钥保留为枚举,然后您应该检查this已将Enum
作为密钥维护的位置Enum
是保存在另一个实体中,该实体是该键值对的值。
E.g。
@OneToMany(mappedBy = "valueEntity", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@MapKeyEnumerated(EnumType.STRING)
@MapKeyColumn(name = "fieldType", insertable = false, updatable = false)
private final Map<FieldType, ValueEntity> otherFields = new HashMap<>();
此处字段类型为Enum
。