在 Java 或 Grails 应用程序中动态创建实体、Spring 存储库和 facelets 页面

Posted

技术标签:

【中文标题】在 Java 或 Grails 应用程序中动态创建实体、Spring 存储库和 facelets 页面【英文标题】:Dynamically create entities, Spring repositories and facelets pages in Java or Grails application 【发布时间】:2015-02-24 20:25:50 【问题描述】:

我有要求让用户创建自己的表格并在应用程序中动态创建自己的表单。可以想象可以有 3 个单独的表:user_relations、user_relation_fields、user_relation_field_values。它们一起可以满足要求。但显然涉及到这样的解决方案,每个选择都需要很多连接。动态创建表很容易,并且很容易从用户定义的字段集动态创建 CRUD SQL 语句。我更喜欢使用注解(而不是配置 XML 文件),因此可能不需要动态更新配置文件。

问题是 - 如何创建 ORM (JPA, Spring Repository) 映射到动态创建的表。是否可以动态创建实体并将它们作为已运行应用程序的一部分插入?是否可以动态创建facelets页面的代码然后插入到应用程序中?是不是很好的做法。

许多 ERP 类型的应用程序允许某种弹性域或可扩展性功能,因此这应该是可能的。

我听说 Grails 是具有元编程功能的动态 Java,也许在 Grails 中创建这样的应用程序更合适(尤其是因为它使用 Spring 和 Hibernate)?

欢迎任何提示或建议。我想应该可以做到,但一些初步的想法会有所帮助。谢谢!

【问题讨论】:

我正在研究使用 OSGi 包的想法——每组新的表都可以是继承了一些基本类和模板的 OSGi 包,也许可以在运行时动态创建 OSGi 包并将它们安装在主要应用程序? 也许这是个好主意,不幸的是已经有关于它的专利“OSGi dynamic bundle generation at runtime”US 8230389 B2 【参考方案1】:

我想知道为什么人们需要所有这些模式、设计模式等等。有时最好从较低级别写一些东西。你的任务是很好的案例。在我看来,最好在没有映射的情况下用纯 jdbc/hql 编写这个模块。值得考虑数据库类型。在基于关系的数据库中实现动态实体并不容易。也许 NoSQL 数据库会是更好的选择。

【讨论】:

以上是关于在 Java 或 Grails 应用程序中动态创建实体、Spring 存储库和 facelets 页面的主要内容,如果未能解决你的问题,请参考以下文章

Grails:在 gsp 中显示创建的图像

如何在 Grails 中动态选择服务

您可以通过 Grails 中的脚手架使用动态查找器或分组表吗?

在 grails 应用程序后面使用 Python 或 C

Grails 4:独立端口

在没有 SPSS 许可证的情况下从 Python、Java(groovy/grails)或 C++ 应用程序访问 SPSS 数据?