Grails Grails 与 Hibernate
Grails 与 Hibernate
如果 GORM (Grails
Object Relational Mapping)没有你想象的那么足够灵活,作为选择,你可以使用Hibernate映射你的domain类.
要做到这点,需要在你项目的grails-app/conf/hibernate
目录创建一个hibernate.cfg.xml
文件并为你的domain类对应HBM映射文件
.
更多关于这方面的信息,请查看Hibernate站点的文件映射
这允许你映射Grails domain类适用于更广的遗留系统并更加灵活的创建数据库模式 .
Grails也允许你在Java中编写domain类或重用以存在的domain
model,这些都通过使用Hibernate来映射 . 你需要做的是放置必须的hibernate.cfg.xml
文件和对应的映射文件在grails-app/conf/hibernate
目录中 .
另外,令人兴奋的是你仍然可以调用GORM中所有动态之久和查询方法 !
15.1 通过Hibernate注解映射
Grails 也支持通过Hibernate的Java 5.0注解支持来创建domain类映射.
为了做到这点,你需要通过设置DataSource
中的configClass
属性告诉Grails你要使用注解配置,如下 :
import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsAnnotationConfiguration
dataSource {
configClass = GrailsAnnotationConfiguration.class
… // remaining properties
}
这就是它的配置!确保你安装了Java 5.0,因为这需要使用注解.
现在,为了创建一个注解类,我们在src/java
中简单的创建一个新的Java类并使用EJB 3.0规范来定义注解(详情参考Hibernate Annotations
Docs):
package com.books; @Entity public class Book { private Long id; private String title; private String description; private Date date;@Id @GeneratedValue public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getDescription() { return description; }
public void setDescription(String description) { this.description = description; } }
一旦完成,你需要使用Hibernate sessionFactory
注册这个类
,为了做到这点,你需要添加 如下的grails-app/conf/hibernate/hibernate.cfg.xml
文件:
<!DOCTYPE hibernate-configuration SYSTEM "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <mapping package="com.books" /> <mapping class="com.books.Book" /> </session-factory> </hibernate-configuration>
当Grails加载时,会注册这个类必要的动态方法 . 查看Scaffolding了解 Hibernate domain 类中可以做的其他事情.
15.2 进一步阅读
Grails提交者, Jason Rudolph,花了许多时间写了许多关于通过自定义Hibernate使用Grails:
- Hoisting Grails to Your Legacy DB - An excellent article about using Grails with Hibernate XML
- Grails + EJB3 Domain Models - Another great article about using Grails with EJB3-style annotated domain models
上一篇: 结构体实现单向链表