2017-06-15 4 views
-1

Hibernateエンティティクラスで次のタイプの関係を作成するには? ユーザーは、メッセージ(送信者、受信者、メッセージ)を作成して別のユーザーにメッセージを送信します。 DBは次のようになります。Hibernateユーザメッセージ関係

+-----------------------------------+ 
|    user    | 
+-----------------------------------+ 
| id | nickname | password | 
+----+-------------+----------------+ 
| 1 | admin |  pass  | 
+----+-------------+----------------+ 

+------------------------------------------------+ 
|      message     | 
+-----------------------------------|------------+ 
| id | sender_id | receiver_id | message_t | 
+----+-------------+----------------+------------+ 
| 1 |  10  |  12  |  hi | 
+----+-------------+----------------+------------+ 

エンティティクラスの外観はどのようにする必要がありますか?

@Entity 
@Table(name="profiles") 
public class Message { 

    @Id 
    @Column(name="id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name = "sender") 
    private User sender; 

    @ManyToOne 
    @JoinColumn(name = "receiver") 
    private User receiver; 

    @Column(name = "message") 
    String message; 
} 

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

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @OneToMany(mappedBy =) 
    List<Message> messages; 
} 

マップされたものは何ですか?現在のユーザーが送信者OR/AND受信者として存在するすべてのメッセージを見つける必要があります。 (ユーザーがメッセージを自分宛に送信できるため、「AND」)。

答えて

0

メッセージエンティティとユーザマッピングのすべての情報があなたのために重要ではない、あなたが読んだユーザによって送信または受信されたメッセージを見つける必要がある場合。

メッセージmここm.sender = m.receiverとから選択M!(m.sender =ユーザーまたは m.receiver =ユーザー)。

一方向性と双方向性の2つのタイプの関係があります。

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

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @OneToMany(mappedBy = receiver) 
    private List<Message> messagesRecived; 

    @OneToMany(mappedBy = sender) 
    private List<Message> messagesSended; 
} 
:ユーザーのためのエンティティのマッピングで使用すると、送信者とreciverについての情報を維持する必要があり

ならば、dibirectional関係を(あなたはすでにメッセージでこの情報を持っています)