来自Ruby on rails背景我习惯于Active Record和运行迁移(几乎所有需要更改数据库的东西)。我知道Grails与众不同,但Hibernate究竟是如何适应的呢?
所以这就是我看待事物的方式,
有效记录(RoR的ORM)= GORM (Grails的ORM)
Hibernate适合哪里? Rails在没有Hibernate的情况下与数据库进行对话,为什么Grails需要休眠?
还可以使用Grails而不使用Hibernate吗?
由于
答案 0 :(得分:1)
可以在没有Hibernate的情况下使用Grails。这是由于GORM的设计方式。 GORM是一个抽象记录持久性的API层。有各种implementations,Hibernate就是其中之一。
答案 1 :(得分:1)
Hibernate适合哪里? Rails没有与数据库对话 Hibernate为什么Grails需要休眠?
更轻松的说,这类似于说“Grails在没有ActiveRecord的情况下与数据库进行对话,为什么Rails需要ActiveRecord” :)
ActiveRecord和Hibernate恰好分别是RoR和Grails的“模型”层的数据库访问的默认实现。
实际上对于Grails来说,在上面的句子中将“Hibernate”替换为“GORM”更为正确。就像正确提到的OP一样,它们在两个框架中扮演“ORM组件”的角色。 GORM定义在比典型ORM更高的抽象层次上,@Sudhir和@Joshua在答案中已经涵盖了这一点。但是,在所有可能的实现中,Hibernate是默认的;所以假设“这是唯一的方法”并不罕见。
(作为旁注,GORM可能不再是以前的缩写,其中R =关系,因为今天有许多非关系实现。现在是它自己成为一个单词的时候了。 :“Gorm”;就像"Ajax" is no longer the acronym it used to be :)或者也许是“Grails数据映射”的新缩写GDM - 项目的Github名称?)
所以对你上一个问题的简短回答......
是否可以使用Grails而不使用Hibernate?
...是“是”。
但是,如果你问“使用没有Hibernate的Grails是否可取”,那么答案就是:“这取决于......但是出于实际目的不行!”
如果您使用的是非关系数据存储,那么这是一个明智的选择。你没有多少选择;每个非关系数据存储最多只能实现一次GORM。实际上,您甚至可能根本不被允许使用GORM(取决于实现是否足够好,甚至存在!)。顺便说一句,是的Grails也可以在没有GORM的情况下使用!是否值得,是为特定项目做出的决定。
但是如果您使用关系数据库并且仍然不想使用Hibernate,则可以使用gorm-jpa插件使用GORM的JPA实现。但它似乎没有超过自2012年以来的里程碑版本。我从未使用它,能够评论它是否完美无缺(或至少与Hibernate一样好)。
或者,如果由于任何原因你发现Active Record pattern(RoR的默认实现)适合你的应用程序而不是Data Mapper pattern(这就是Hibernate所遵循的),那么你可能会使用{{ {3}}或JavaLite甚至是Spring JDBC模板(@Vivek提到,但你必须首先用它实现ActiveRecord模式),然后独立使用它(在GORM之外)或者甚至可以实现它使用其中一个来自己的GORM实现ActiveRecord模式。谁知道,这可能会让其他Rails开发人员更容易拿起Grails:)
换句话说,将Grails与关系数据库一起使用的最安全,最快捷的方法是使用GORM的Hibernate实现。
对于迁移,Liquibase是一个很好的工具。甚至有ActiveJPA。
答案 2 :(得分:0)
GORM也在底层使用Hibernate,即GORM建立在休眠之上。您可以在Grails中使用两种方法:
还可以使用Grails而不使用Hibernate吗?
是的,但这不是优选的。显然,您可以使用Grails中Spring提供的JDBC模板。
答案 3 :(得分:0)
GORM是一个抽象层,它是实现中立的,可以有多个gorm实现,例如,用于hibernate的gorm,用于mongo db的gorm或用于cassandra的gorm。
现在回答您的问题“Hibernate适合哪里” Grails(或GORM)没有实现自己的ORM,它提供了插件的api来扩展它,插件利用现有的ORM框架,如Hibernate或JPA,并将对象关系映射的实际工作委托给那些框架。所以这里Hibernate实际上就是那个工作,gorm在这些现有框架之上提供了一个易于使用的api。
存在gorm的多个实现,hibernate插件就是其中之一,但mongodb plugin还有一个gorm。如果你愿意,你可以创建你的插件来支持其他一些持久性技术的gorm。