Hibernate 用户消息关系
Hibernate user messages relation
如何在 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" 因为用户可以向自己发送消息)。
如果您需要查找用户发送或接收的消息,您已经拥有消息实体中的所有信息,用户映射对您来说并不重要。
select m from Message m where m.sender!=m.receiver and (m.sender=:user or
m.receiver=:user).
关系有两种类型:单向和双向。
如果在用户的实体映射中你应该保留关于发送者和接收者的信息(你已经在消息中有这个信息)那么双向关系:
@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;
}
如何在 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" 因为用户可以向自己发送消息)。
如果您需要查找用户发送或接收的消息,您已经拥有消息实体中的所有信息,用户映射对您来说并不重要。
select m from Message m where m.sender!=m.receiver and (m.sender=:user or m.receiver=:user).
关系有两种类型:单向和双向。
如果在用户的实体映射中你应该保留关于发送者和接收者的信息(你已经在消息中有这个信息)那么双向关系:
@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;
}