【问题标题】:Sharing domain objects between a grails application and a non grails application在 Grails 应用程序和非 Grails 应用程序之间共享域对象
【发布时间】:2013-01-17 21:56:08
【问题描述】:

我有一个 grails 应用程序,其中包含一些被序列化为 JSON 的域对象。在另一个 java/groovy 项目中,我想使用这些域对象。如果我发布一个插件,看起来只有其他 grails 应用程序可以使用该插件。

我尝试使用域类及其数据创建一个原始的 groovy 项目,在我的 grails 应用程序中,我有这样的存根:

class Fact extends com.domain.Fact {}

然而,当我去运行我的应用程序时,我得到了这些

Caused by MappingException: Missing type or column for column[facts_fact] on domain[DeclarationDefinition] referencing[com.domain.Fact]
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync

我正在做的事情可能吗,还是有更好的方法?

最终,我希望能够将 POGO 重新用作 grails 域对象,或者将 grails 域对象导出为 POGO。

【问题讨论】:

    标签: grails groovy gradle grails-plugin


    【解决方案1】:

    我相信您必须手动处理所有与休眠相关的工件。我在一个项目中做过类似的事情,我创建了一个域对象的 Java 库,并在 Grails、桌面和 Android 项目之间共享它。它变得乏味,但它奏效了。不过,所有注释都必须手动完成。

    【讨论】:

      【解决方案2】:

      复制数据模型会简单得多。

      这种级别的服务相互依赖意味着你做错了服务。

      版本化您的服务,并拥有 API。使用 JSON 进行 API 通信,不要尝试任何古怪的方案来共享数据模型。如果您要共享数据模型,您可能只有一项服务,而不是两项。

      【讨论】:

      • 我认为这通常不是真的。 1) 不同的产品可以对相同的域数据进行建模——使用相同的数据模型,可能来自共享库,有助于保持事物的一致性。 2) 通过 REST API 进行通信时,服务器和客户端总是处理完全相同的事情。为什么要多次实现源/目标类?
      【解决方案3】:

      您可以在 Grails 中设置自己的休眠配置。

      因此,您可以将 POGO 重新用作 grails 域对象之类的东西(不确定注入的方法,如 findByXaddToYs 等)。

      请参阅 grails 中有关休眠的官方文档:http://grails.org/doc/latest/guide/hibernate.html

      【讨论】:

        猜你喜欢
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-04
        • 2013-05-02
        • 2014-02-16
        相关资源
        最近更新 更多