【问题标题】:Is it possible to add new JPA/Spring entity in runtime to the running Java web application是否可以在运行时向正在运行的 Java Web 应用程序添加新的 JPA/Spring 实体
【发布时间】:2015-06-27 13:12:13
【问题描述】:

我正在尝试创建允许其用户创建新表单和表格的 Web 应用程序(许多 ERP 应用程序都有这样的功能)。生成和保存 HTML 表单很清楚,在数据库中生成新表也很清楚。但是实体呢,例如Spring @Entity 和 @Repository 类。

可以尝试在运行中编译然后保存到 Web 应用程序部署目录中,这应该是可能的。但是是否需要更新现有 bean、存储库和控制器的某种内部 Spring 注册表。 Java JPA 也有这样的注册表吗?

有可能做这样的事情吗?很明显,可以在 php 中执行此操作,例如动态更新 yii 框架应用程序,因为没有编译代码(可能除了缓存代码),并且每个新请求都会重新扫描可用路径。但是这在 Enterprise Java 和 Spring 应用程序中是如何发生的呢?

也许我应该寻找 Groovy Grails 或 Scala Play - 它们可能是更动态的语言。

【问题讨论】:

标签: java spring spring-mvc jpa yii


【解决方案1】:

更多与 JPA(ObjectDB 和 Co)兼容的“对象 java 存储”有望通过额外的字段和类实现更顺畅、更自然的迁移。我没有个人意见。

编辑:我认为好的观点有 ActiveRecord 和类似的哲学。 Java 中的解决方案很少。我已经尝试了这样的解决方案并取得了部分成功,但我的项目不太动态(类很稳定),我们切换到清除 JPA。

【讨论】:

    【解决方案2】:
    1. 一些 ERP 应用程序(使用不同的语言 f.e.C、Java.C#)具有“内核类和附加字段”的概念,即。具有所有典型字段以及“首选颜色”的客户(通常在额外的隐藏表中实现)。如果他们不需要新的关系就可以了

    2. Eclipselink 在 JPA 领域有类似的概念“额外字段”(不是严格的标准 JPA,而是扩展)https://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic 在项目级别,似乎可以输入非关键数据

    3 很难想象在没有彻底重新设计的应用程序的情况下创建大量动态重要/中心类(表)(通常是 2.0 版;))

    1. 有时我尝试使用 Hibernate 和 Eslipselink 使用不同的持久性单元(在 Tomcat 环境中)停止并重新启动 EMFactory,但不在生产中使用。重置和启动似乎没问题,这就像 JPA 引擎的破裂和新生。它更像是应用程序 2.0 而不是小补丁。

    2. 在 Hibertate 和 Eslipselink(表名前的前缀)中创建多个 gemmini 表集(用于同一数据库中的不同公司)很好,开始时专用线很少,正常干净的 JPA 使用。经测试,一切OK。

    【讨论】:

      【解决方案3】:

      再一次,添加单个/几个表在社区中的返工很差。 将通用 JPA 模块(代码+JPA)“粘合”在一起是一个有趣的讨论,这通常由 OSGI 程序员完成。 从理论上讲,它必须模块给你的表,在同一个 PU 中强连接。

      在 ERP 应用程序级别,它可以是从“添加 CRM 模块”到“内核 + 销售”的任何内容。 我是一个感兴趣的旁观者,但我没有看到任何成功。

      如果你在 google 中从部分集成持久性单元,复合持久性单元,许多程序员试图达到这样的目标。 它就像一根钓鱼竿而不是鱼(正如古老的格言所说)。

      Persistence Unit 概念对此类想法不友好(并且在标准 JPA 中被阻止)。

      【讨论】:

        猜你喜欢
        • 2012-04-06
        • 2015-09-21
        • 2014-09-22
        • 1970-01-01
        • 1970-01-01
        • 2012-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多