2017-06-15 266 views
-1

如何在Hibernate實體類中創建下一類關係? 用戶通過創建消息(發送者,接收者,消息)向其他用戶發送消息。 DB看起來像這樣:休眠用戶消息關係

+-----------------------------------+ 
|    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; 
} 

映射者..什麼?我需要找到當前用戶作爲發件人或/和接收者存在的所有消息。 (「AND」,因爲用戶可以給自己發送消息)。

回答

0

如果您需要查找由用戶發送或接收的消息,您可以將消息實體和用戶映射中的所有信息與您無關。從消息m

選擇m,其中m.sender = m.receiver和!(m.sender =:用戶或 m.receiver =:用戶)。

關係有兩種類型:單向和雙向。

如果用戶實體映射你應該保持有關發件人和reciver信息(你已經在此留言信息),然後dibirectional關係:

@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; 
}