0

私のアプリでは、 と が異なるUserためItem、各ユーザーは多くのアイテムを選択できます。

チュートリアルでは、@ManyToManyアノテーションについて学びました。

@Entity
public class Item extends Model {

    ...

    @ManyToMany(cascade = CascadeType.REMOVE)
    public List<User> users = new ArrayList<User>();

しかし、私が考えることができる 2 番目のオプションは、日付や時刻などの追加情報を追加できるように、ユーザーとアイテムの関係に対して別のクラスを定義することです。

@Entity
public class ItemUserRel extends Model {
    @Id
    public Long id;

    public User user;
    public Item item;

    //additional information
    public Date date;

    ...

両方のオプションのどちらがより良い設計で、その理由は?

4

1 に答える 1

2

少し前に同様の問題に直面しました。Userまた、モデルとモデルを処理する必要がありましたGroup。私の要件は次のとおりです。

ユーザーはn 個 readableおよびn 個 writableのグループを持つことができます。これらのアクセス許可は、3 番目のテーブルに格納する必要があります (ユーザー テーブルでもグループ テーブルでもない)。しかしauthorisedBy、「authorizedOn」などの追加のプロパティもあります。そのため、 @ManyToManyは機能しませんでした。実際に制御できなかったためです。また、追加のプロパティにより、JPA 経由でのマッピングが難しくなります。

UserGroupおそらく他のデザインも可能ですが、新しいクラスを導入するのが最善だと思います。このクラスは@ManyToOne、単一のUser.

これら 3 つのモデルを定義することになります。

  1. ユーザー
  2. グループ -グループ モデルに関する一般情報
  3. UserGroup - などの追加フィールドを含みます。permissionsauthorisedByauthorisedOn

私の User モデルでは、gettergetUserGroups()がありますが、getPersonalGroup()これは基本的に in の 1 つの (個人的な) インスタンスですGroupgetUserGroups()createdByandauthorisedByは同じユーザーです。

この設計は、私にとってはるかに保守しやすく、より明確であることがわかりました。また、この設計により、管理者が UserGroups の権限を管理および変更できる快適なユーザー インターフェイスを作成することができました。

もっと有益な情報かも

于 2013-09-27T09:06:41.813 に答える