@vladimir
Односторонняя связь между двумя сущностями в Hibernate означает, что только одна из сущностей содержит ссылку на другую, и не наоборот. Например, у нас есть класс "Книга" и класс "Автор", и мы хотим создать одностороннюю связь, где книга имеет ссылку на автора, но автор не имеет ссылки на его книги.
Для реализации односторонней связи с помощью Hibernate необходимо использовать аннотацию @ManyToOne в классе "Книга", которая будет ссылаться на класс "Автор". Это означает, что один автор может иметь много книг, а каждая книга может иметь только одного автора.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@Entity @Table(name = "book") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "author_id") private Author author; // constructors, getters, and setters } |
Здесь мы использовали аннотацию @ManyToOne, чтобы определить связь между классами "Книга" и "Автор". Мы также добавили аннотацию @JoinColumn, чтобы указать, что колонка "author_id" будет использоваться для хранения ссылки на автора в таблице "book".
Теперь мы можем сохранять экземпляры класса "Книга" в базе данных с помощью Hibernate:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); Author author = new Author(); author.setName("Leo Tolstoy"); Book book = new Book(); book.setTitle("War and Peace"); book.setAuthor(author); session.save(book); session.save(author); session.getTransaction().commit(); session.close(); |
В этом примере мы создали экземпляры классов "Автор" и "Книга", связали их между собой и сохраняем их в базе данных. Обратите внимание, что мы сохраняем сначала автора, а затем книгу, потому что мы должны иметь существующую запись для автора, прежде чем мы можем ссылаться на нее из книги.
Теперь мы можем получить информацию о книге и ее авторе:
1 2 3 4 5 6 7 8 9 |
Session session = HibernateUtil.getSessionFactory().openSession(); Book book = session.get(Book.class, 1L); Author author = book.getAuthor(); System.out.println("Book title: " + book.getTitle()); System.out.println("Author name: " + author.getName()); session.close(); |
В этом примере мы загружаем экземпляр класса "Книга" из базы данных, затем получаем ссылку на связанный экземпляр класса "Автор" с помощью метода getAuthor(). Наконец, мы выводим название к