使用Grails访问没有域类的数据库

时间:2010-12-09 04:25:21

标签: database grails groovy db2 grails-domain-class

我在尝试将Grails应用程序与AS400 / DB2数据库放在一起时遇到了一个问题。我无法映射大多数文件,因为它们没有唯一的字段可用作id。即使他们这样做,他们也是基于文本的字段,而不是可以转换为长类型的格式。 (我不明白为什么PK必须是一个长数据类型?如果你想给我们一个序列或AI的pk,那将是有意义的,但如果你只需要一个独特的键怎么办?我在这里遗漏了什么?)

我想知道是否可以保留我已设置的数据源,并且只使用它来直接对数据库进行SQL访问而不必使用域对象?

我见过的东西是将域对象设置为瞬态。但我不知道你是否仍然可以在没有id字段的情况下做同样的事情。有谁知道它是如何工作的?

有什么想法吗?

谢谢, 乔恩

2 个答案:

答案 0 :(得分:3)

主键不需要很长,它只是Hibernate和Grails的标准。您可以将具有域类的唯一varchar列作为主键处理,如下所示:

class Person {

   String username
   String firstName
   String lastName

   static mapping = {
      id name: 'username', generator: 'assigned'
      version false
   }
}

这适用于此DDL定义的表:

create table person (
   username varchar(255) not null,
   first_name varchar(255) not null,
   last_name varchar(255) not null,
   primary key (username)
);

我添加了'version false',因为它是一个遗留系统,你可能没有'版本'乐观锁定列。

答案 1 :(得分:3)

您可以非常轻松地访问数据库,出于性能原因,我们在某些情况下也会这样做:

class SomeService {
    def dataSource;

    def nativeAccessMethod = {
        def sql = new Sql(dataSource);
        def rows = sql.rows("select * from myTable");
        /* processing continues ...*/
    }
}

Groovy的native SQL support也很不错。

相关问题