- - PR -
xdocletでの主キーの定義について
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-07-07 16:00
こんにちは、xdocletについて質問があります、わかるかた
アドバイスをお願いします。 いま主キーとなる列が二つあるエンティティBeanを作成して います。この場合のxdocletのタグの記述方法がわかりませ ん。いろいろ試しましたがどれもうまくいきません。 以下に試した方法と結果を記述します。 (1)単純に二行記述する /** * @ejb.bean * type="CMP" * name="ReceptionState" * primkey-field="dateIn" * primkey-field="receptionNumber" * ----以下 省略---- 結果→ejb-jar.xmlにreceptionNumberのみが主キーとして定義された。 (2)2つの文字列に分け、カンマで区切ってみる /** * @ejb.bean * type="CMP" * name="ReceptionState" * primkey-field="dateIn" , "receptionNumber" * ----以下 省略---- 結果→ejb-jar.xmlにdateInのみが主キーとして定義された。 (3)2つの文字列に分け、空白で区切ってみる /** * @ejb.bean * type="CMP" * name="ReceptionState" * primkey-field="dateIn" "receptionNumber" * ----以下 省略---- 結果→ejb-jar.xmlにdateInのみが主キーとして定義された。 (4)1つの文字列にまとめ、カンマで区切ってみる /** * @ejb.bean * type="CMP" * name="ReceptionState" * primkey-field="dateIn,receptionNumber" * ----以下 省略---- 結果→以下のエラーが発生しビルドに失敗した。 Could not find method getDateIn,receptionNumber that is supposed to return the PrimKeyField. (5)1つの文字列にまとめ、空白で区切ってみる /** * @ejb.bean * type="CMP" * name="ReceptionState" * primkey-field="dateIn receptionNumber" * ----以下 省略---- 結果→以下のエラーが発生しビルドに失敗した。 Could not find method getDateIn,receptionNumber that is supposed to return the PrimKeyField. 以上です、助言、参考になる情報などありましたらお願いします。 |
|
投稿日時: 2003-07-08 23:24
こんにちは、なべぞうさん。
CMPで複合キーを実現するには、独自のプライマリキークラスを作成する必要があると思います。 CMPでの複合キーについてはgoogleなどで調べてみてください。 で、XDocletで自動的に設定するには、プライマリキークラスの自動生成を行えばよろしいかと。 詳しくはXDocletのサイトを見てみてください。自動生成するためのタグ、タスクが用意されています。 簡単に書きますが、クラスレベルに @ejb.pk class = "sample.MyPK" 主キーにしたいフィールドのgetメソッドに、 @ejb.pk-field を記述します。 あとはビルドファイルにタスク<entitypk/>を実行するように記述します。 これでプライマリキークラスとそれを主キーに設定したejb-jar.xmlが生成されます。 |
|
投稿日時: 2003-07-09 14:41
レスありがとうございました、ひろゆきさん。
ひろゆきさんのアドバイスのおかげで、複合キーをもつCMPを作成できました。 動作確認としてレコードの作成、削除、検索を行いました。 このスレッドも200人近い人に参照して頂きました。今後、他の人に役立てて 貰えるよう情報を残しておこうと思います。 下記にひろゆきさんのアドバイスをもとに私が作成したソースを一部抜粋ですが記します。 <<クラスレベルでの記述>> /** * @ejb.bean * type="CMP" * name="ReceptionState" * view-type="remote" * @ejb.pk class="test.interfaces.ReceptionStatePK" * @ejb.finder * signature="Collection findAll()" * transaction-type="NotSupported" * @ejb.persistence * table-name="ReceptionState" * @jboss:remove-table remove="true" */ <<メソッドレベルでの記述>> /** * @ejb.interface-method * @ejb.pk-field * @ejb.persistence * column-name="DateIn" * sql-type="integer" */ public abstract Integer getDateIn(); /** * @ejb.interface-method */ public abstract void setDateIn(Integer dateIn); <<ビルドファイルの記述>> <!-- PrimaryKeyクラスの生成 --> <entitypk/> <!-- CMPエンティティBean生成 --> <entitycmp/> <!-- Valueオブジェクト生成 --> <valueobject/> <!-- リモート/ホームインタフェース生成 --> <remoteinterface/> <homeinterface/> <<クライアントの記述>> /* PrimaryKeyクラスをNEWする */ ReceptionStatePK rStatePK = new ReceptionStatePK( new Integer(args[1]),args2] ); /* 指定された受付日,受付番号に対する既存のレコードを検索 */ ReceptionState rState = home.findByPrimaryKey(rStatePK); 以上です。 |
1
