FoapRequestというドメインクラスがあります。「承認者」と呼ばれるプロパティの1つを整数のリストにします。順序が重要なので、http: //grails.org/doc/latest/guide/GORM.html#sets,ListsAndMapsで説明されているようにクラスをリストとして定義しました。
class FoapRequest {
Integer requester
Integer subject
List approver
static hasMany = [foap:FOAP, newFoap:NewFoap, approver:Integer]
...
明確にするために、FOAPとNewFoapは他の2つのドメインオブジェクトです。
このクラスをOracleデータベースの特定のテーブルにマップする必要があるため、結合テーブルを使用して静的マッピングも指定します。
static mapping = {
table 'OUR_SCHEMA.FOAP_REQUEST_TABLE
id column : 'ID', generator:'sequence', params: [sequence:'OUR_SCHEMA.FOAP_REQUEST_SEQ']
requester column : 'REQUESTER'
subject column : 'SUBJECT'
approver indexColumn: [name: "APPROVER_IDX"], generator:'sequence', params: [sequence:'OUR_SCHEMA.APPROVER_SEQ'],
joinTable: [name:'OUR_SCHEMA.APPROVER_TABLE',
key: 'ASSOCIATED_REQUEST',
column: 'APPROVER_PIDM',
type: "integer"
]
ただし、FoapRequestオブジェクトの新しいインスタンスを作成しようとすると、次のエラーが発生します。
Invalid column type
コンソールには次のように表示されます。
Error 2012-08-01 12:29:31,619 [http-bio-8080-exec-9] ERROR errors.GrailsExceptionResolver - SQLException occurred when processing request: [POST] /FOAPauth/foapRequest/saveFoapRequests - parameters:
問題はジョイント可能にあると確信しています。ドメインモデルには元々joinTableが含まれていませんでした-承認者は単なる整数型でした(複数の承認者を追跡する必要があることに気づきました)。
APPROVERSテーブルを作成するためのSQLは次のとおりです。
CREATE TABLE "OUR_SCHEMA"."APPROVER_TABLE"
(
"APPROVER_IDX" NUMBER(*,0) NOT NULL ENABLE,
"ASSOCIATED_REQUEST" NUMBER(*,0) NOT NULL ENABLE,
"APPROVER_PIDM" NUMBER(8),
);
私が本当に追跡する必要があるのは整数識別子だけなので、可能な限り承認者ドメインクラスを作成することは避けたいと思います。