Добрый день
Есть таблицы:
Таблица Author
@Entity
@Getter
@Setter
public class Author implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
....
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY, mappedBy = "author")
private Book book;
}
Таблица Book
@Entity
@Getter
@Setter
public class Book implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
...
@OneToOne(fetch = FetchType.LAZY)
@MapsId
private Author author;
}
Все сущностью создаются с помощью JAXB из XMl-файла. Всё хорошо, вот только у объекта book поле author - null.
Код записи в БД:
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.persist(author);
session.getTransaction().commit();
session.close();
В таком случае в таблицы book и author записываются строки, только book.author_id = null.
При выполнении кода
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
author.getBook().setAuthor(author);
session.persist(author);
session.getTransaction().commit();
session.close();
Все данные записываются так, как мне надо.
Проблема в том, что таких таблиц и связей очень много и прописывать команды типа author.getBook().setAuthor(author) не правильно на мой взгляд. Да и сама команда как-то странно выглядит.
Как заставить hibernate автоматически подставлять в дочерние элементы ссылку на родителя?
p.s. Вместо @MapsId писал @JoinColumn, но на результат это не повлияло.