[Seasar-user:9964] Re: [DBFlute] classificationDefinitionMapの使い方について

kubo [E-MAIL ADDRESS DELETED]
2007年 8月 19日 (日) 21:12:54 JST


久保です。

加藤さん、こんばんわ
DBFluteのご質問ありがとうございます。

> わかりました.
> ClassificationDefinition.javaですね.
> 
> ちなみに,codeは文字列扱いなんですね.
> 数字は指定できませんでしょうか?
> それと,エンティティのとあるフィールドだけ,Booleanとするような設定は可
> 能でしょうか?

数字は、今のところできません。
「エンティティのとあるフィールドだけ,Boolean」というのはできません。

が、恐らく意図する要件は別の機能で満たせるのではないかと思います。
classificationDefinitionMapとペアになって、
classificationDeploymentMapという設定があります。

classificationDefinitionMap
  → 区分値の定義

classificationDeploymentMap
  → ある区分値が具体的にどのTableのどのColumnに
     関連しているかを示す定義


【classificationDefinitionMap】
map:{
  ; YesNo =  list:{
      ; map:{topCode=YESNO;topComment=はいいいえを示す}
      ; map:{code=y;name=Yes;alias=はい}
      ; map:{code=n;name=No;alias=いいえ}
  }
  ; CollectionStatus  =  list:{
      ; map:{topComment=蔵書の状態を示す}
      ; map:{code=NOR; comment=通常状態を示す}
      ; map:{code=WAT; comment=待ち状態を示す}
      ; map:{code=OUT; comment=貸し出し中を示す}
  }
}

【classificationDeploymentMap】
map:{
  ; $$ALL$$ = map:{suffix:_YN=YesNo}
  ; COLLECTION_STATUS = map:{COLLECTION_STATUS_CODE=CollectionStatus}
  ; COLLECTION_STATUS_LOOKUP = map:{COLLECTION_STATUS_CODE=CollectionStatus}
}


ここでは、
  YesNoという区分値 → 全てのTableの'_YN'で終わる名称のColumnに関連
  CollectionStatusという区分値
    → COLLECTION_STATUSのCOLLECTION_STATUS_CODE
       とCOLLECTION_STATUS_LOOKUPのCOLLECTION_STATUS_CODEに関連

このように関連付けると何がうれしいかというと、

A. Entityに判定Methodが作成される。
B. ConditionBeanに区分値設定Methodが設定される。

【Aの例】
final Book entity = new Book();
entity.setDeleteYn("y");
assertTrue(entity.isDeleteYnYes());
assertFalse(entity.isDeleteYnNo());

【Bの例】
final BookCB cb = new BookCB();
cb.query().setDeleteYn_Equal_Yes();
  → where BOOK.DELETE_YN = 'y'
(通常は、cb.query().setDeleteYn_Equal("y");)

このように、全てTypeSafeで実装が可能です。
また、区分値が実際にClassificationDefinition.java上に
どのように定義されているかというのは、ほとんどの場合に
おいて、あまり意識する必要がありません。
(文字列と数値と違いは、内部的に吸収されています)

これで、やりたい事は満たせますでしょうか?



#
# 無論、CODE部分を数値なら数値の型で定義したいという
# のもできるものなら対応したいですが、他のタスクとの兼ね合いで
# 優先度は下げさせて頂きたいです。
#






Seasar-user メーリングリストの案内