针对即席查询结果的假GORM映射

时间:2015-06-29 19:24:42

标签: grails gorm

我想使用Grails构建应用程序,这是一个复杂的数据搜索和分析系统的前端,它已经作为RDBMS(这里是oracle)中的一组存储过程编写。

我希望实例化某些类的对象,我将其编写为对存储过程返回的某些数据集的行进行包装。对于这个类,我根本不需要任何GORM映射,我想手动执行查询并从它的行中实例化这些对象。这些对象永远不会被更改和写入,因为整个DB应该是只读的,只能存储会话信息。

Hibernate可以做到这一切,而且它有" Immutable"和为此的只读实体,但当我试图将此实体标记为" Immutable"我没有取得多大成功。

是否可以创建这样的假映射,并且根本不应该创建它? 有什么其他可能的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为你不能在GORM中做到这一点,但你可以使用普通的Hibernate和Grails。

在src / groovy文件夹中添加您的类。一个例子,在src / groovy / example中:

package example

import java.io.Serializable;
import javax.persistence.Id
import javax.persistence.Entity
import javax.persistence.Table
import javax.persistence.Column
import org.hibernate.annotations.Immutable

@Entity
@Table(name="first_result")
@Immutable
class FirstResult implements Serializable {
    private static final long serialVersionUID = 1L

    @Id
    Integer id

    @Column(name="name")
    String resultName

}

(你也可以在src / java中编写POJO,但是你需要编写构造函数,getter和setter)

在grails-app / conf / hibernate / hibernate.cfg.xml中添加:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory>
      <mapping class="example.FirstResult" />
  </session-factory>
</hibernate-configuration>

然后,在您的控制器和服务中,您可以使用:

example.FirstResult.findAllById(1)

或任何其他适用于Grails中的域类的方法。