5

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

我想知道是否可以保留我已设置的数据源并将其用于直接 SQL 访问数据库而无需使用域对象?

我看到的是将域对象设置为瞬态。但我不知道你是否仍然可以在没有 id 字段的情况下做类似的事情。有人知道它是如何工作的吗?

有任何想法吗?

谢谢,乔恩

4

2 回答 2

3

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

class SomeService {
    def dataSource;

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

Groovy 的原生 SQL 支持也很好。

于 2010-12-09T07:02:16.443 回答
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)
);

我添加了“版本错误”,因为它是一个遗留系统,您可能没有“版本”乐观锁定列。

于 2010-12-09T04:45:08.297 回答