以下のようなテーブル構造で、
BOOK (本) BOOK_ID not null (PK) BOOK_NAME not null AUTHOR_ID not null (FK) AUTHOR (著者) AUTHOR_ID not null (PK) AUTHOR_NAME not null
BOOKエンティティには以下のようなアノテーションがあり、
public static final int author_RELNO = 0; public static final String author_RELKEYS = "AUTHOR_ID:AUTHOR_ID";
DAOにはSQLアノテーションを付けて、BOOKだけを純粋に検索したいとします。
public static final String getListAll_SQL = "select BOOK_ID, BOOK_NAME, AUTHOR_ID from BOOK";
この結果の個人的な期待は:
- BOOKエンティティはAUTHORエンティティを保持しない(nullが返る)、
ですが、実際は:
- BOOKエンティティはAUTHORエンティティを保持しており、
- そのAUTHORエンティティのAUTHOR_IDにはDB上の「著者ID」が存在します。
- そのAUTHORエンティティのAUTHOR_NAMEはnull。
です。
RELNOやRELKEYSを設定した状態のエンティティを利用すると、
SQLアノテーションなどで結合対象から外しても、
主キーのみ存在する空のFK先エンティティは存在する。
これは、S2Daoの仕様になりますでしょうか?
これは業務上あまり問題にはなりませんが、自分はS2Daoを少し包含した
フレームワークを開発しており、細かい絡みになりますが少し気になってます。