[seasar-php:128] S2DaoのDTOについて

ISHITOYA Kentaro [E-MAIL ADDRESS DELETED]
2007年 5月 7日 (月) 17:55:45 JST


石戸谷と申します。

S2Daoを最近使わせていただいているのですが、わからないことがあるので質問
させてください。
バージョンは、1.1.2です。

・DTOで自動検索SQLを生成しようとしても生成されない。

DAOに、

public function findByPersonsSearchCondition(PersonsSearchCondition $dto);

というメソッドを定義して、

class PersonsSearchCondition{
    public $nickname = "hogehoge";
    public function setNickname($nickname){
        $this->nickname = $nickname;
    }
    public function getNickname(){
        return $this->nickname;
    }
}

という、DTOを定義しました。
この状態で、

$dao = ComponentFactory::getComponent("AutoPersonsDao");
$entity = new PersonsSearchCondition();
$entity->setNickname("mogemoge");
$entities = $dao->findByPersonsSearchCondition($entity);

としても、WHERE句が生成されません。いろいろおってみたのですが、
S2DaoInterceptor.class.phpの45行目あたりで、sqlをダンプすると、

/*BEGIN*/ WHERE /*END*/

のように、最後に空のWHERE句が生成されていました。
いまいちよくわかっていないのですが、S2Dao_DaoMetaDataImpl.class.phpの485
行目の、
            if($dmd->hasPropertyType($aliasName)){
                continue;
            }

という、命令をコメントアウトすると、意図したとおりに動作します。あるい
は、DTOの定義で、
class PersonsSearchCondition{
    const nickname2_COLUMN = "nickname";
    public $nickname2;
    public function setNickname2($nickname2){
        $this->nickname2 = $nickname2;
    }
    public function getNickname2(){
        return $this->nickname2;
    }
}

のようにすると、やはり意図したとおりに動作します。

何か根本的にやり方が間違っているような気がしています。
問題の解決方法あるいはポインタをご教示いただければ幸いです。
よろしくおねがいいたします。


seasar-php メーリングリストの案内