繁体   English   中英

允许用户在Spring MVC Hibernate应用程序中添加自己的自定义字段 - 什么是理想的方法?

[英]Allowing users to add their own custom fields in a Spring MVC Hibernate application - What's an ideal approach?

我们都可能看到过像JIRA这样的应用程序,或者许多CRM或其他应用程序允许其用户为实体定义自己的自定义字段,并使用它做各种各样的事情,比如强制它们,验证它们的值等等。

我想在我们正在创建的产品中做到这一点。

假设我们的产品允许用户创建他/她自己的项目。 项目具有预定义的属性,例如

  • 名称(字符串)
  • 说明(CLOB)
  • 类型(字符串)
  • 所有者(String)
  • 状态(字符串)

现在,作为用户,我想将以下自定义字段添加到我的项目中

  • 截止日期(日期)

理想情况下,他应该能够在我的产品中创建一个自定义字段,该字段将捕获以下详细信息:

  • 该字段的名称
  • 字段的类型
  • 默认值
  • 值列表(如果该字段是下拉列表)
  • 强制与否

同样,我想允许这个功能不仅可以向项目添加自定义属性,还可以向其他一些实体添加自定义属性。

这是我们正在使用的技术堆栈,到目前为止我们已经很好了。

  • Spring MVC,JSP和jQuery作为Web框架和视图
  • JPA与Hibernate持久化
  • Oracle,MS SQL,MySQL - 目前我们的产品适用于这些数据库。

我该如何处理这个要求? 我希望接受以下方面的教育:

  • 如何为此决定最佳数据模型? 我是否为自定义字段定义添加了一个单独的表,为其值添加了另一个表,并通过外键将它们与我的实体相关联?
  • 我应该如何在JSP / JS层中使用定义的任何自定义字段动态绘制屏幕?
  • 我如何让Spring MVC和Hibernate处理所有这些数据模型和视图?

我在这里已经阅读了几个问题,特别是这个问题

在我的应用程序中添加自定义字

读到这个,我可以想出我可以使用NoSQL数据库来实现这个功能。 虽然我可以这样做,但我想知道在我目前的技术堆栈中是否有任何方法可以实现这一点,以便在我的产品发展的这个阶段不引入新的东西。

如果我的问题没有框架或措辞不当,我感到非常抱歉。 我对这些技术比较陌生,并希望学习每一项挑战。

谢谢,Sriram

您可以使用Collection映射来根据不同的用户保存不同的属性。 将额外字段保存为map,其中attribute-name将是KEY,属性值将是地图的VALUE。

@ElementCollection
Map<String, String> data;

此外,您可能希望保持地图的关键是一个枚举,那么你应该检查出其中一个Enum一直维持的关键和Enum保持在它是键值对的值的另一个实体。 例如

@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM