5

GrailsアプリをAS400/DB2データベースと組み合わせようとしているときに、問題が発生しました。IDとして使用する一意のフィールドがないため、ほとんどのファイルをマップできません。そして、たとえそうだとしても、それらはテキストベースのフィールドであり、長いタイプに変換できる形式ではありません。(PKが長いデータ型でなければならない理由がわかりません。意味のあるpkのシーケンスまたはAIが必要な場合でも、一意のキーが必要な場合はどうなりますか?ここで何かが不足していますか?)

設定したデータソースを保持し、ドメインオブジェクトを使用せずにDBへの直接SQLアクセスに使用できるかどうか疑問に思っています。

私が見たものは、ドメインオブジェクトを一時的なものとして設定することでした。しかし、idフィールドがなくてもそのようなことができるかどうかはわかりません。誰かがそれがどのように機能するか知っていますか?

何か案は?

ありがとう、ジョン

4

2 に答える 2

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)
);

これはレガシーシステムであり、おそらく「バージョン」の楽観的なロック列がないため、「バージョンfalse」を追加しました。

于 2010-12-09T04:45:08.297 に答える
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 に答える