Как отобразить промежуточную таблицу в Hibernate - PullRequest
0 голосов
/ 10 июня 2018

Я хочу отобразить промежуточную таблицу, которая выглядит следующим образом:

Так выглядит мой класс пользователя:

@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;

Объекты сохраняются правильно, но не в таблице избранного, вместо этого сохраняются только идентификаторы 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 (?, ?)

Изображение того, что сохраняется в БД:

1 Ответ

0 голосов
/ 12 июня 2018

Я смог решить проблему, проблема в том, что Hibernate не дал бы промежуточной таблице идентификатор двух других, так как идентификаторы не были сгенерированы до сохранения объектов.Мне пришлось отказаться от автоматически сгенерированных идентификаторов и дать идентификаторы, к которым у меня был доступ, до сохранения объектов.Это решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...