[DAO-7] [Seasar-user:3605] JOINしないSQLなのにRelation先のインスタンスが取得できてしまう Created: 2006-06-08  Updated: 2008-07-01  Resolved: 2006-06-13

Status: Resolved
Project: S2Dao
Component/s: s2dao
Affects Version/s: 1.0.33
Fix Version/s: 1.0.35

Type: Improvement Priority: Major
Reporter: manhole Assignee: manhole
Resolution: Fixed Votes: 0
Labels: None
Environment:

s2-extension-2.3.8
s2-framework-2.3.8
s2-dao-1.0.33



 Description   

以下のようなテーブル構造で、

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を少し包含した
フレームワークを開発しており、細かい絡みになりますが少し気になってます。



 Comments   
Comment by manhole [ 2008-07-01 ]

2006年 05~06月に掛けての、[Seasar-user:3605]から始まるスレッドが元ネタ。
http://ml.seasar.org/archives/seasar-user/2006-May/thread.html#3604
http://ml.seasar.org/archives/seasar-user/2006-June/thread.html#3739

Comment by manhole [ 2006-06-11 ]

nullを返すように修正しました。s2dao-1.0.35から修正を含みます。

Generated at Tue Apr 15 17:31:17 JST 2025 using Jira 10.5.0#10050000-sha1:9d9d098bb7b67e8dba8da380ba9c3900d82ac3cf.