[s2container-php5:111] コメントアノテーション使用時の複数キーでの N:1 マッピングについて

Shinya Tsuda [E-MAIL ADDRESS DELETED]
2007年 12月 29日 (土) 00:14:31 JST


はじめまして、津田と申します。

現在、担当プロジェクトで S2Dao.PHP5 を利用させていただいておりますが、
表題の件について、不具合と思われる部分を見つけましたので報告します。

リファレンス (http://s2dao.php5.seasar.org/reference.html#N1Mapping) を
参照し、以下のような定義を含むエンティティを作成しました。

    /**
     * @Relation(relationNo = 0, relationKey = "sysid, subsysid")
     */
    public $subsystem;

    public function getSubsystem() {
        return $this->subsystem;
    }

    public function setSubsystem(Subsystem $subsystem) {
        $this->subsystem = $subsystem;
    }

対応する DAO で DB にアクセスしようとすると以下のような例外が発生しました。

    array and hash can not mix.
        [ @Relation(relationNo = 1, relationKey = "sysid, subsysid")  ]
        [ subsysid" ]

調査したところ、S2DaoAnnotationReader#getAnnotationObject() で
アノテーションをオブジェクトにするため、文字列を , で explode() した際に
" で囲われた部分が分割されてしまうことが原因と分かりました。

また、結果セットからマッピングを構成する際に、エンティティが正しく
マップされない不具合も発見しました。
こちらは、S2Dao_RelationKey#__construct() で生成されるハッシュの
コリジョンが原因であることがわかりました。

どちらの事象も、添付のパッチのとおり修正して解決しました。
修正に問題がないようであればリリースに盛り込んでいただきたいと思います。

ご検討、よろしくお願いします。

-- 
Shinya Tsuda
[E-MAIL ADDRESS DELETED]

-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: S2Dao-dacci.patch
URL:  http://ml.seasar.org/archives/s2container-php5/attachments/20071229/28400f1a/attachment.pl 


S2Container-PHP5 メーリングリストの案内