【发布时间】:2019-07-10 09:21:44
【问题描述】:
我正在使用 Spring、Hibernate 和 JPA 构建一个聊天应用程序,我想要两个表 - 聊天和消息。聊天会有很多消息,还有 id 和 user_first 和 user_second。现在我正在使用复合主键进行操作,其中复合主键是 user_first 和 user_second,并且 id 是唯一的自动增量:
public class ChatPK implements Serializable {
protected int firstUser;
protected int secondUser;
...
@Entity
@IdClass(ChatPK.class)
@Table(name = "chats1")
public class Chat implements Serializable {
@Id
private int firstUser;
@Id
private int secondUser;
@Column(name = "id", unique = true, nullable = false, insertable = false, updatable = false)
@GeneratedValue(strategy= GenerationType.IDENTITY)
private int id;
...
有没有更好的方法?为什么?
更新:聊天是两个人之间的唯一行,不能与相同的两个用户进行两次聊天。我想将我需要的所有消息与拥有这些消息的两个用户一起获取,因此我可以将发件人 ID 放入 hashmap 键中,并将消息放入一个值中。对于下面的答案,SessionId 与我的桌面聊天所做的事情不同,而不是实现我想要的不同方式。
【问题讨论】:
-
如果这不是您的实际 id(主键),为什么还要有 id 字段?我要么删除 id 字段,要么将其设为您的 @Id 并在其他两个字段的组合上添加唯一约束。
标签: java spring hibernate composite-primary-key