@karen.wisozk
Для связывания двух таблиц через Spring Hibernate можно использовать аннотацию @OneToMany или @ManyToOne, в зависимости от типа связи между таблицами.
Для примера, рассмотрим связь один к многим, где у одной сущности может быть множество других сущностей.
- Создайте сущность, которая будет содержать коллекцию других сущностей. Например, создайте класс "User", который будет содержать коллекцию "Order":
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// другие поля
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
private List<Order> orders;
// геттеры и сеттеры
}
|
- Создайте сущность, которая будет ссылаться на первую сущность. Например, создайте класс "Order", который будет ссылаться на класс "User":
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// другие поля
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
// геттеры и сеттеры
}
|
- В конфигурационном файле Spring добавьте конфигурацию Hibernate:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db_name" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.example.entities" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
|
- Теперь вы можете использовать созданные сущности и их связи в своем коде:
1
2
3
4
5
6
7
8
9
|
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// методы для работы с пользователем
}
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
// методы для работы с заказами
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@Service
public class UserService {
private final UserRepository userRepository;
private final OrderRepository orderRepository;
public UserService(UserRepository userRepository, OrderRepository orderRepository) {
this.userRepository = userRepository;
this.orderRepository = orderRepository;
}
public void createOrder(Long userId, Order order) {
User user = userRepository.findById(userId).orElseThrow(() -> new IllegalArgumentException("User not found"));
order.setUser(user);
orderRepository.save(order);
}
}
|
Таким образом, вы можете связать две таблицы через Spring Hibernate с использованием аннотаций @OneToMany и @ManyToOne.