ドキュメントの不備で「基底クラスがテーブル名である必要があるように見えちゃうよね。 あなたの「Footballer」「Clicketer」のパターンであれば、それぞれに対応するテーブルを作成する必要があります。…エエエエェェェー!?これって、つまり「SingleTable」で継承を解決してないのでは!?俺が間違ってるんだろうか?もぅワカラン。orz
- Player...ID,nameを持つ。
- Footballer extends Player...clubを持つ。
- Clicketer extends Player...battingAverageを持つ。
- 「Player」「Footballer」「Clicketer」全てのClassのメンバを保持するPlayersテーブルでやりくりする。
- Players...id,name,club,battingAverage
- Concrete Table Inheritance
- サブクラスごとにTableを作成する。各Tableには基底クラスのメンバを持たせる。
- Footballers...id,name,club
- Clicketer...id,name,battingAverage
- Class Table Inheritance
- 各Classに対応したTableを作成する。
- Players...id,name
- Footballers...club
- Clicketers...battingAverage
Footballer p0 = new Footballer("player01", "club01"); p0.save(dbm); Clicketer c0 = new Clicketer("player01", 30L); c0.save(dbm);これで、勝手にPlayersTableに保存される「べき」。取得する時は、
Collection<Player> players = dbm.loadObjects(new ArrayList<Player>(), Player.class);という具合に取得すれば、RDB的にはPlayersTableから取得し、Java的にはそれの各メンバのnullをチェックして「Footballer」「Clicketer」が生成される「べき」。Footballerなのにclubがnullだったりしたら解決できなさそぅだけど、それはO→Rする前にチェックするとして今は考えない。 …なんば間違っとぅとー!?わかんねぇ。 まぁ、継承の話よりも関連の話をもっと色々試す方が重要なんだけどね。気になってしまって。。小さか男ばい。
Blogged with Flock
0 件のコメント:
コメントを投稿