Java 如何在Hibernate中映射中间表

Java 如何在Hibernate中映射中间表,java,database,hibernate,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",

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

这就是我的用户类的外观:

@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;
对象正确保留,但不在收藏夹表中,而是仅保存ID 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不会给中间表提供另外两个表的id,因为在对象被持久化之前没有生成id。 我不得不放弃自动生成的ID,并在持久化对象之前提供我有权访问的ID。
这就解决了问题。

但是你不发布创建对象的代码,然后将其持久化,事实上JPA提供程序也会这样做(通过查看其日志)。编辑以添加更多信息。可能是因为你没有向con变量添加任何内容?有时你还引用表内容和其他内容(日志文件)内容显示的代码从不设置ID值,因此它们在数据库中为0,与您在收藏夹表中显示的FK值相匹配。您可以用代码解释一下您是如何做到这一点的吗?我是初学者,我不懂。
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 (?, ?)