0

基本的にユーザーとドキュメントで構成されるデータモデルに取り組んでいます。これで、新しいドキュメントが追加されるたびに、特定のユーザーがドキュメントを閲覧していなかった(クリックしたなど)限り、ドキュメントを「未表示」として識別するフラグが表示されます。

そのようなシナリオをどのようにモデル化しますか?ユーザーとドキュメントの関係にブール値/フラグを付ける方法はありますか?

これが私の簡略化されたモデルです:

@Entity
@Table(name="User")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;
    @Column(length = 128)
    private String name;
    @ManyToMany(mappedBy = "users", fetch=FetchType.LAZY)
    private List<Document> documents = new ArrayList<Document>();

    // getters and setters ...

}

ドキュメントクラスは次のとおりです。

@Entity
@Table(name = "Document")
public class Document {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;
    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name = "Inbox", joinColumns = @JoinColumn(name = "document_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
    protected List<User> users = new ArrayList<User>();

    // getters and setters ...

}

助けてくれて本当にありがとうございます!

4

2 に答える 2

1

結合テーブルに新しい列を追加するとInbox、「見えない」ブール値が格納されます。次に、結合テーブルを新しいエンティティとしてマップし、多対多の関連付けを 2 つの OneToMany associations に分解します

于 2013-02-26T17:44:06.933 に答える
1

Matt が結合テーブルを参照した JB Nizet の回答では、一意の主キー ( id)、2 つの外部キーに対する 1 つの一意の制約、および追加の列があります。これは良い方法です。

ただし、@ManyToMany使用していると、結合テーブルに 2 つの外部キーで構成される主キーが存在する可能性が最も高くなります。そのパターンにとどまり、余分な列を追加したい場合は、おそらくクラスを使用して複合主キーを に反映させるviewedことに慣れる必要があります。このようにするときは、 /をオーバーライドする必要があることに注意してください。@Embeddable@Entityequalshashcode

クラスを作成するための出発点として、他の質問に対する私の答えを見ることができます。@Entity回答では、結合されたテーブルのエンティティとその主キーが説明されています。

于 2013-02-26T18:19:23.537 に答える