0

私には2つのエンティティがあります。1)ドキュメントおよび2)Document_Users。ドキュメントには、リーダーとライターを含めることができます。テーブルは次のように設計されています。

書類

  • Id
  • 名前

Document_Users

  • id
  • 名前
  • 役割
  • document_id

「role」属性には、READERとWRITERのいずれかの値を指定できます。

以下のようにDocumentクラスを設計したいと思います。

@Entity
@Table
public class document
{
@Id
private int id;
@Column
private String name;

private List<DocumentUser> readers;

private List<DocumentUser> writers;
}

上記のクラスの「リーダー」と「ライター」をマップして、ドキュメントを選択したときにそれらのリストを取得できるようにする方法を教えてください。

ありがとう。

4

1 に答える 1

0

物事を単純化し、DocumentUser のマップされたコレクションを 1 つだけ持つだけです。ライターを取得すると、フィルター処理されたコレクションが返されます。ライターではないリーダーを取得するための同上:

public List<DocumentUser> getWriters() {
    List<DocumentUser> result = new ArrayList<DocumentUser>();
    for (DocumentUser du : documentUsers) {
        if (du.getRole() == DocumentUserRole.WRITER) {
            result.add(du);
        }
    }
    return du;
}

これには、データベース設計の現実に非常に近いという利点があります。実装固有のトリックは必要ありません。documentUser.setRole(DocumentUserRole.WRITER)また、リストからユーザーを削除して他のユーザーに追加する必要なく、 を実行するだけでリーダーをライターに変換できます。

DocumentUser のタイプが最初からわかっていて、変更されない場合は、継承ベースのソリューションが適切でした。

于 2012-06-11T07:10:35.837 に答える