まず、私の英語で申し訳ありません。
Javaでデータベースを扱うのはこれが初めてで、純粋なJDBCとSQLで単純な中間層(データベースとアプリケーションの間)を書きたいと思っています。DAO、ORM、およびアクティブ レコード パターンについて少し読んだことがありますが、気になることが 1 つあります。複数のテーブルで構成されるオブジェクトにデータを入力するときに、このシステムはデータの冗長性をどのように処理するのでしょうか。
例えば:
私は2つのテーブルを持っています
TABLE message (id, content, recipient_id)
TABLE person (id, name, address)
マッピングしたい
/* depends on message and person tables */
class Message
{
public Message(int id, String content, Person recipient) {...}
// setters, getters ommited.
private int id;
private String content;
private Person recipient;
}
/* depends on person table */
class Person
{
public Person(int id, String name, String address) {...}
// setters, getters ommited.
private int id;
private String name;
private String address;
}
2 つの解決策があります。
1) でこれら 2 つのテーブルを結合する SQL 選択を実行table message
することにより、オブジェクトにマップできます。対応するオブジェクトには が入力されます。もちろん、人とメッセージの間に「1対多」の関係がある限り、これにより多くの重複データが残ります。Message
message.recipient_id = person.id
new Message(..., new Person(...))
2) からすべてを選択しtable person
、オブジェクトに入力しnew Person(...)
て保存できますMap<Integer, Person>
(マップ キーは ID を保持します)。次に、からすべてを選択しtable message
、一致するものを見つけてこれら 2 つを手動で「結合」しPerson
ます。Person
これにより、複数の によって参照される の1 つのインスタンスがMessage
残りますが、その場合、データベースにデータを保持するという全体のポイントが失われることを恐れています。
ORMシステムはそれをどのように処理しますか? その状況で私は何をすべきですか?