Как Hibernate определяет, какой JDBC-драйвер использовать для подключения к БД?

«Как Hibernate определяет, какой JDBC-драйвер использовать для подключения к БД?» — вопрос из категории Hibernate, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Hibernate определяет JDBC-драйвер по комбинации конфигурационных свойств и анализа classpath.

Основные механизмы:

  1. Явное указание: Драйвер можно задать напрямую через свойство hibernate.connection.driver_class.
  2. Неявное определение (чаще всего): Hibernate использует диалект (Dialect) и URL подключения.
    • Диалект (например, org.hibernate.dialect.MySQL8Dialect) указывает на СУБД.
    • URL (например, jdbc:mysql://localhost:3306/db) содержит схему (jdbc:mysql:).
    • Hibernate ищет в classpath подходящий драйвер, который зарегистрирован для этой схемы.

Пример конфигурации hibernate.cfg.xml:

<!-- Диалект помогает Hibernate генерировать правильный SQL -->
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<!-- URL содержит схему 'jdbc:postgresql:' -->
<property name="hibernate.connection.url">jdbc:postgresql://localhost/mydb</property>
<!-- Драйвер часто подбирается автоматически, но можно указать явно -->
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>

Важно: Сам JDBC-драйвер (JAR-файл, например mysql-connector-java или postgresql) должен быть добавлен в зависимости проекта (Maven/Gradle). Hibernate не включает драйверы "из коробки".