Hibernate用户消息关系

时间:2017-06-15 23:56:12

标签: java hibernate one-to-many hibernate-onetomany mappedby

如何在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;
}

映射...什么?我需要找到当前用户作为发送者OR / AND接收者存在的所有消息。 (&#34; AND&#34;因为用户可以向自己发送消息)。

1 个答案:

答案 0 :(得分:0)

如果您需要查找用户发送或接收的消息,则您在消息实体和用户映射中拥有所有信息对您无关紧要。

  

从消息m中选择m,其中m.sender!= m.receiver和(m.sender =:user或   m.receiver =:用户)

关系有两种类型:单向和双向。

如果在用户的实体映射中你应该保留有关发送者和reciver的信息(你已经在Message中有这个信息)那么双向关系:

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