如何在Hibernate中映射中间表

时间:2018-06-10 05:35:28

标签: java database hibernate

我希望映射一个如下所示的中间表:

这是我的用户类的外观:

@Entity
@Table(name = "users")
public class User

@Id
@Column(name = "user_id")
private int id;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name="FAVORITES",
joinColumns = @JoinColumn(name = "fk_user_id", 
                          referencedColumnName = "user_id"), 
inverseJoinColumns = @JoinColumn(name = "fk_content_id", 
                          referencedColumnName = "content_id"))
private Set<Content> favorites;

这就是我的内容课的样子:

@Entity
@Table(name = "content")
public class Content

@Id
@Column(name="content_id")
private int id;

对象保持正确,但不在收藏夹表中,而只保存ids 0。

我在哪里创建对象:

public void registerUser(User tempUser) {
    Session session = this.SessionFactory.getCurrentSession();
    session.beginTransaction();
    Content con = new Content();
    Set<Content> favs = new HashSet<Content>();
    favs.add(con);
    tempUser.setFavorites(favs);
    session.save(tempUser);
    session.getTransaction().commit();
    session.close();
}

还有一个日志:

Hibernate: select content_.content_id from contents content_ where content_.content_id=?
Hibernate: insert into users (user_id) values (?)
Hibernate: insert into contents (content_id) values (?)
Hibernate: insert into FAVORITES (fk_user_id, fk_content_id) values (?, ?)

DB中持久存在的图像:

1 个答案:

答案 0 :(得分:0)

我能够解决问题,问题是Hibernate不会给中间表提供其他2的id,因为在持久化对象之前没有生成id。 我不得不放弃自动生成的id并在持久化对象之前给出我可以访问的id。 这解决了这个问题。