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

标签 java spring hibernate spring-mvc

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

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

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

  • 名称(字符串)
  • 描述(CLOB)
  • 类型(字符串)
  • 所有者(字符串)
  • 状态(字符串)

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

  • 截止日期(日期)

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

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

同样,我希望允许将自定义属性添加到项目中,也添加到其他一些实体中。

这是我们正在使用的技术堆栈,到目前为止我们对此还算满意。

  • Spring MVC、JSP 和 jQuery 作为 Web 框架和 View
  • JPA 与 Hibernate 一起实现持久性
  • Oracle、MS SQL、MySQL - 目前我们的产品适用于这些数据库。

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

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

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

Adding custom fields in my application

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

如果我的问题没有正确表述或措辞,我深表歉意。我对这些技术相对较新,并且希望通过每次挑战来学习。

谢谢, 斯里拉姆

最佳答案

您可以使用Collection mappings以便根据不同的用户保存不同的属性。将额外字段保存为 map ,其中属性名称将是 map 的 KEY,属性值将是 map 的 VALUE。

@ElementCollection
Map<String, String> data;

此外,您可能希望将映射的键保留为枚举,那么您应该检查 this其中 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

关于java - 允许用户在 Spring MVC Hibernate 应用程序中添加自己的自定义字段 - 理想的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41501468/

相关文章:

java - 如何从不同位置加载 hibernate.cfg.xml

mysql - 获取列名

java - MySQL 或 Hibernate 缓存问题接收旧数据

java - 在 Java 中直接比较 2 float/double 是否安全?

java - 下载文件以在 Amazon S3 上对其进行修改

java - 确定最后一位上车的乘客! - 满足时间复杂性

java - 在 Spring MVC 上保持用户 session

java - 使用Gradle 2.12(对于Java),当且仅当 'build'时,如何才能下载源文件?

java - AuthorizationServerConfigurerAdapter 外部的 ClientDetailsS​​ervice java 配置

java - Spring MVC CSS、字体、图像不会显示在 index.html 页面中