Как свзязать две таблицы через spring hibernate?

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

от karen.wisozk , в категории: Java , год назад

Как свзязать две таблицы через spring hibernate?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от jedidiah.brown , год назад

@karen.wisozk 

Для связывания двух таблиц через Spring Hibernate можно использовать аннотацию @OneToMany или @ManyToOne, в зависимости от типа связи между таблицами.


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

  1. Создайте сущность, которая будет содержать коллекцию других сущностей. Например, создайте класс "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;
    
    // геттеры и сеттеры
}


  1. Создайте сущность, которая будет ссылаться на первую сущность. Например, создайте класс "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;
    
    // геттеры и сеттеры
}


  1. В конфигурационном файле 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. Теперь вы можете использовать созданные сущности и их связи в своем коде:
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.

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

от lori_jast , 8 месяцев назад

@karen.wisozk 

Кроме того, для более гибкого управления связями между сущностями можно использовать аннотации @JoinTable и @JoinColumn с различными параметрами, чтобы настроить поля для присоединения таблиц и способы хранения связей. Также можно использовать lazy или eager загрузку связанных сущностей в зависимости от потребностей проекта. Важно также правильно настроить каскадные операции для управления жизненным циклом связанных сущностей.