Beanの連携(?)について質問です

例えば
社員名テーブルと給与テーブルがあったとします。
社員名テーブルと給与テーブルは社員コードでつながっているとします。

社員テーブルへのデータ取得・登録・削除などを行うEmployeeBeanクラスと
給与テーブルへのデータ取得・登録・削除などを行うPaymentBeanクラスがあります。
つまりそれぞれのBeanにはセッター、ゲッター、メソッドがあるということです。

画面からは社員一覧・登録・変更・削除ができます。
給与テーブルも給与一覧・登録・変更・削除ができます。
共通するメソッド(一覧・登録・変更など)もありますが、共通しないメソッド(検索など)もあります

「社員テーブルと給与テーブルを社員コードでつなげた一覧」を表示する場合はどうすれば
よいかで詰まってしまいました。

「社員テーブルと給与テーブルを社員コードでつなげた一覧」を取得するBeanクラスを
作ればできたのですが・・・・EmployeeBeanとPaymentBeanのプロパティ、セッター、ゲッターを
このBeanクラスでも定義しないといけないのはなんとも芸がないといいますか…


どうすればスマートなソースになるのかご指導お願いします!!

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>社員テーブルと給与テーブルが1対多の関係で


>HashMapのキーをどうしようかなぁと思ったのです。
ということは
給与テーブルが
社員コード 給与ID
社員A   01
社員A   02
社員A   03
社員B   01
社員B   02
社員B   03
の様になっているのですよね?

以下なっているという仮定で。
であれば、給与テーブルのデータは1行をHashMapに入れて、それをArrayListやVectorに格納して、それをさらにHashMapにセットするというのはどうでしょう?
(ややこしいですね。(^^;A)
社員データのHashMap
キー     値
社員コード  12345
名前     ほげ ほげお
給与テーブル 給与テーブル各行を格納したArrayList


給与テーブルの各行を格納したArrayList
0:給与IDが01の行
1:給与IDが02の行


というような感じでデータを格納してはいかがでしょうか?
少しでも参考になれば。

>HashMapは同一キーは上書きでオブジェクトが登録されるのですよね?
はい。ですので、社員名テーブルと給与テーブルが1対1の関係で、同じキー名(カラム名)で「意味の違う内容」であった場合にキー名を変えないといけないのでは?という意味でした。
    • good
    • 0
この回答へのお礼

社員テーブルのデータをArrayListで取得し
JSP内で<core:forEach>で順に表示し
HashMapに格納した給与テーブルをキー[社員コード_連番(01,02,03・・・)]で取得し表示する。
で無事表示できました。

JSP内もそんなにゴチャゴチャせず、クラスも増えず
給与クラスにHashMapでデータを取得するメソッドを
1つ追加するだけという、シンプルでGoodです!!

pcbeginnerさんご指導ありがとうございました!!

お礼日時:2005/04/19 14:43

#2です。


いっそのことBeanは各テーブルへのアクセスだけに専念させて、中身のデータはMapなどに格納してやりとりしてはどうでしょう???
各Beanに新たに
public HashMap getMap()
 新しくHashMapを生成して、そのHashMapに持っているデータをセットして返す。
public HashMap getMap(HashMap map)
 引数で渡されたHashMapに持っているデータをセットして返す。(同じキー名があった場合の考慮を忘れずに)
な感じのメソッドを実装してみるとか。

いかがでしょう???

この回答への補足

今No4.のhanazawa-loveさんの形で試しているところですがなかなかうまくいかなくて・・
っていうかプロパティをセットするの面倒だなぁと・・
それにテーブルを結合するたびにクラスを作るのも管理が増えるかなぁと思いまして

HashMapに格納する方法は考えたんですヨ
でも社員テーブルと給与テーブルが1対多の関係で
HashMapのキーをどうしようかなぁと思ったのです。

でも今考えたら
給与テーブルのキーが社員CDと給与IDとした場合
給与IDは01,02,03・・・とほぼ固定なので
HashMapのキーに社員CD_給与IDとかしてしまう方法もありですね・・・
HashMap(社員CD_給与ID, 給与クラスのインスタンス)
ッて感じでしょうか!?

勉強不足ですみませんが
「同じキー名があった場合の考慮を忘れずに」とは具体的にはどういことでしょう?
HashMapは同一キーは上書きでオブジェクトが登録されるのですよね?

補足日時:2005/04/19 12:23
    • good
    • 0

オレはそーゆー場合は


SQLで社員テーブルと給与テーブルをつなげたデータを持ってきて、そいつを新しいクラスに持たせてます。
そんで画面で表示させると。
他の回答にあるように現在あるクラスを利用するのもありとは思うんですが、
画面のソースがわかりにくくなるんじゃねぇかと。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございました。
画面のソースがわかりにくくなるようでしたら、
また新たにクラスを作る方法も今後の参考にさせていただきます。。

お礼日時:2005/04/19 14:50

ごめんなさい、質問の内容を読んでいるうちに頭が混乱しました…


要は社員テーブルと給与テーブルの二つを繋げた一覧を取得する場合はどうするかですよね?

私は昔に似たようなのを作りましたが、その時は二つのクラスを同時に扱いました。
社員コードはどっちも同じなわけだから問題なく作動するはずです、新しくクラスを作る必要はありません。
試してないけどArrayListに二つのクラスが格納されているなら
給与 キュウヨ = (給与)キュウヨリスト.get(シャイン.get社員コード);
みたいな感じで扱えば問題ないと思いますけど、どうかな?
もちろん、この場合は二つのクラスを扱うのでArrayListなどに格納する順番などは同一にしなければなりません、

私の場合は社員クラスと給与クラスを作ってデータベースにアクセスする専用のBeanで実現しました。
ただ二つのクラスを同時に扱うのでロジック的にはどうかと思うけど…
ちなみにデータベースから値を受ける時は同じ条件で検索とかして
それぞれのクラスで受け取るのではなく、JOINとかして一気に取得した方がいいですよ☆
取得したデータを格納する時だけ二つのクラスに分けましょう☆
それが一番手っ取り早いと思います♪
何やら答えてて訳が判らなくなった(汗
質問の意図や内容、答えを取り間違ってたらごめんなさいm(_ _)m
    • good
    • 0
この回答へのお礼

ご指導ありがとうございました。
今後の参考にさせていただきます!!

お礼日時:2005/04/19 14:47

>「社員テーブルと給与テーブルを社員コードでつなげた一覧」を表示する場合…



EmployeeBeanクラス

PaymentBeanクラス
を2つ渡せばいいのでは?
2つのBeanをリクエストにセットして、画面側で2つのBeanを使えないのかな?

それか、社員名テーブルと給与テーブルを合わせたBeanを作るとか。
その場合、登録、削除する場合のチェックがちょっと複雑になるかもしれませんが。
    • good
    • 0

こんにちは。



うーん・・・、よくわかりませんが、
新しいクラスを一つ作って、両方のインスタンスを持たせればいいんじゃないでしょうか・・・?
クラス.インスタンス(どっちかのBean).get(set)
でいいのでは?
(^^ゞ
    • good
    • 0
この回答へのお礼

ご指導ありがとうございました。

お礼日時:2005/04/19 14:46

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング