Как реализовать одностороннюю связь при помощи hibernate?

Пользователь

от vladimir , в категории: Java , год назад

Как реализовать одностороннюю связь при помощи hibernate?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от fred , год назад

@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(). Наконец, мы выводим название к

Пользователь

от krista , 2 месяца назад

@vladimir 

ниги и имя автора на экран.