【发布时间】:2013-12-10 15:38:31
【问题描述】:
我有一个 hibernate 为用户和聊天之间的关系自动生成的表(一个聊天可以有多个用户,一个用户可以有多个聊天):
==User Model==
@Entity
public class User implements Serializable{
@Id
@GeneratedValue
private int userId;
private String username
==聊天模式==
@Entity
public class Chat implements Serializable{
@Id
@GeneratedValue
private int chatId;
private String subject;
@ManyToMany
private List<User> users;
@ManyToOne
private User created;
这会生成一个名为 Chat_User 的新表,其中包含用户和聊天的 ID。现在我需要在这个生成的表中添加另一个字段(lastSeen)。这怎么可能实现?现在我有一个新模型,看起来像下面的模型,但它不起作用:
@Entity @Table(name = "Chat_User", catalog = "pdl") public class ChatUser implements Serializable {
@Id
@ManyToOne
@JoinColumn(name="users_userId", nullable=false)
private User user;
@Id
@ManyToOne
@JoinColumn(name="Chat_chatId", nullable=false)
private Chat chat;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date lastSeen;
它会抛出一个异常:“字段列表”中的未知列“lastSeen”。当我在数据库中手动创建它时,它会以某种方式工作,但随后它会创建多个条目(一个具有 lastSeen 作为值 NULL,另一个具有正确的值)。请帮忙。
【问题讨论】:
-
如何将值插入这些表中?否则,据我所知,
@JoinTable注释不允许您指定额外的列。 -
会话会话 = HibernateUtil.getSessionFactory().openSession(); tx = session.beginTransaction(); ChatUser chatUser = new ChatUser(); chatUser.setLastSeen(新日期()); chatUser.setChat(聊天); chatUser.setUser(loggedInUser); session.save(聊天用户); tx.commit();