【问题标题】:ManyToMany table with extra column Hibernate带有额外列 Hibernate 的 ManyToMany 表
【发布时间】: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();

标签: java hibernate


【解决方案1】:

您需要创建一个可嵌入类并使用关联覆盖来覆盖连接表。 Click here for a link to sample code by mkyong 。如果您需要更多帮助,请告诉我。

【讨论】:

  • 是的,该教程是我尝试的第一件事。给我带来了很多问题......没有其他方法可以做到这一点吗?那个教程看起来很狡猾。
  • 好吧,我之前已经参考过该教程,它运行起来非常顺滑。你在使用它时遇到了什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 2010-11-12
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
相关资源
最近更新 更多