2011-01-20 12 views
3

私は2つのエンティティMessageとUserを持っています。ユーザーはManyToManyのMessage(ユーザーは多数のメッセージを持つことができます)とMessage(これはあまり複雑ではありません)とManyToManyの関係を持ちます(複数のユーザーにメッセージを送信できます)。JoinTableを休止状態にする追加のプロパティを追加する

@JoinTableを使用して2つのエンティティを結合していますが、メッセージが新しいか読まれたかなどを示すために結合テーブルに「ステータス」カラムを追加したいと思います。しかし、Messageエンティティは、これはおそらく不可能と思っています。

私はこの質問に対して、仲介エンティティを使用すると言った多くの回答を見ましたが、可能ならばそれを避けたいと思います。

誰も私の問題を解決する可能性はありますか?

答えて

4

JPA 2.0(つまり、Hibernate 3.5以上)は、三項関係をモデル化するためのサポートをMapとして導入しました。たとえば、双方向関係が必要な場合は、相手側とどうすればよいかはわかりませんが、次のようにすることができます。

public enum MessageStatus { READ, UNREAD } 

public class User { 
    ... 

    @ElementCollection 
    @CollectionTable(name = "MessagesToUsers", joinColumns = @JoinColumn(name = "userId")) 
    @Column(name = "messageStatus") 
    @MapKeyJoinColumn(name = "messageId") 
    private Map<Message, MessageStatus> messages = new HashMap<Message, MessageStatus>(); 

    ... 
} 
+0

このようにアノテーション付けされたフィールドは条件クエリで使用できますか? –

+0

私には分かりませんでしたので、このルートに進むと、関係(つまり、 'User'に関連する' Message's)とこれを通じた余分な値の両方を管理できるようになります地図。別々の 'Collection 'フィールドはありません。例えば、 'User'から' Message'アソシエーションを削除したければ、このマップのキーからメッセージを削除します。 –

+0

@axtavt、私の質問を見て助けてください:http://stackoverflow.com/questions/27916180/add-extra-property-to-intermediary-table-when-mapping-many-to-many-association-w – DerekY

関連する問題