Grails 使用GORM进行活动记录和休眠

Grails 使用GORM进行活动记录和休眠,grails,gorm,Grails,Gorm,我来自RubyonRails背景,习惯于活动记录和运行迁移(几乎所有需要更改数据库的操作)。我知道Grails是不同的,但Hibernate到底是如何适应的呢 这就是我的看法 活动记录(ORM代表RoR)=GORM(ORM代表Grails) 冬眠适合在哪里?Rails在没有Hibernate的情况下与数据库通信,为什么Grails需要Hibernate 也可以在没有Hibernate的情况下使用Grails吗 谢谢不用Hibernate就可以使用Grails。这是由于GORM的设计方式。GORM

我来自RubyonRails背景,习惯于活动记录和运行迁移(几乎所有需要更改数据库的操作)。我知道Grails是不同的,但Hibernate到底是如何适应的呢

这就是我的看法

活动记录(ORM代表RoR)=GORM(ORM代表Grails)

冬眠适合在哪里?Rails在没有Hibernate的情况下与数据库通信,为什么Grails需要Hibernate

也可以在没有Hibernate的情况下使用Grails吗


谢谢

不用Hibernate就可以使用Grails。这是由于GORM的设计方式。GORM是一个抽象记录持久性的API层。有多种,Hibernate就是其中之一。

GORM也在引擎盖下使用Hibernate,即GORM构建在Hibernate之上。在Grails中,您可以遵循两种方法:

  • 通过使用JavaPOJO持久类使用原始Hibernate
  • 使用域类 也可以在没有Hibernate的情况下使用Grails吗


    是的,但不可取。显然,您可以在Grails中使用spring提供的JDBC模板。

    GORM是一个抽象层,它与实现无关,可以有多个GORM实现,例如,用于hibernate的GORM、用于mongo db的GORM或用于cassandra的GORM

    现在来回答你的问题“Hibernate适合哪里?” Grails(或GORM)没有实现自己的ORM,它为插件提供了扩展它的api,插件利用现有的ORM框架,如Hibernate或JPA,并将对象关系映射的实际工作委托给这些框架。因此,Hibernate才是真正负责这项工作的人,gorm在现有框架的基础上提供了一个易于使用的api

    gorm有多种实现,插件就是其中之一,但mongodb也有gorm。如果你愿意,你可以创建你的插件来支持gorm的其他持久性技术

    冬眠适合在哪里?Rails与数据库进行对话,而无需 Hibernate为什么Grails需要Hibernate

    简单地说,这类似于“Grails在没有ActiveRecord的情况下与数据库对话,那么Rails为什么需要ActiveRecord”:

    ActiveRecord和Hibernate恰好分别是RoR和Grails的“模型”层的默认数据库访问实现

    实际上,对于Grails来说,在上面的句子中将“Hibernate”替换为“GORM”更为正确。就像OP正确提到的那样,它们在两个框架中扮演着“ORM组件”的角色。@Sudhir和@Joshua在他们的回答中已经提到了GORM是在比典型ORM更高的抽象层次上定义的这一点。但是,在所有可能的实现中,Hibernate是默认的;因此,假设“这是唯一的办法”并不罕见

    (作为旁注,GORM可能不再是以前的缩写,其中R=Relational,因为现在有许多非关系实现。现在是时候让它自己变成一个词了:“GORM”;就像:)或者可能是“Grails数据映射”的新缩写GDM——项目的Github名称?)

    最后一个问题的简短答案是

    不使用Hibernate就可以使用Grails吗

    …是“是的”

    但是如果你问“在没有Hibernate的情况下使用Grails明智吗?”,答案可能是:“这取决于……但实际情况并非如此!”

    如果您使用的是非关系型数据存储,那么这是一个不需要动脑筋的问题。你没有太多的选择;每个非关系数据存储最多有一个GORM实现。事实上,您甚至可能被迫根本不使用GORM(取决于实现是否足够好,甚至是否存在!)。顺便说一句,Grails也可以在没有GORM的情况下使用!这是否值得,取决于具体项目的决定

    但是,如果您使用的是关系数据库,但仍然不想使用Hibernate,那么可以使用插件使用GORM的JPA实现。但自2012年以来,它似乎还没有超越里程碑式的发布。我从来没有使用过它,能够评论它是否工作完美(或者至少和Hibernate一样好)

    或者,如果出于任何原因,您发现(RoR的默认实现)比(Hibernate就是这样)更适合您的应用程序,那么您可能会使用类似或甚至Spring JDBC模板的东西(由@Vivek提到,但您必须首先用它实现ActiveRecord模式),然后,或者单独使用它(在GORM之外),或者甚至可以使用其中一个实现您自己的ActiveRecord模式的GORM实现。谁知道呢,这可能会让其他Rails开发人员更容易掌握Grails:)

    tl;博士 换句话说,在关系数据库中使用Grails最安全、最快捷的方法是使用GORM的Hibernate实现


    对于迁移,Liquibase是一个很好的工具。甚至还有一个。

    。Hibernate简单地简化了与不同DB类型的交互,而无需知道如何或如何编写DB查询等?