Maven Dependencies
Spring Boot Project (Recommended)
In a Spring Boot 3 project, one starter brings Hibernate 6, Jakarta Persistence 3.1, Spring Data JPA and the HikariCP connection pool. Add a JDBC driver for your database:
pom.xml
pom.xml
<dependencies>
<!-- Hibernate + JPA + Spring Data JPA + HikariCP -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- pick ONE driver (version managed by Spring Boot) -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!--
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>Example output
$ ./mvnw dependency:tree | grep -E "hibernate|persistence|HikariCP" [INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:3.5.x [INFO] | +- com.zaxxer:HikariCP:jar:6.3.x [INFO] | +- org.hibernate.orm:hibernate-core:jar:6.6.x.Final [INFO] | | +- jakarta.persistence:jakarta.persistence-api:jar:3.1.0
Note: The old driver coordinates mysql:mysql-connector-java were renamed to com.mysql:mysql-connector-j. Spring Boot 3 manages only the new name.
Gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.mysql:mysql-connector-j'
}Hibernate Without Spring (for Understanding)
You can also use Hibernate in a plain Java app. Add hibernate-core and a driver, then configure it with hibernate.cfg.xml or META-INF/persistence.xml:
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.6.15.Final</version>
</dependency>persistence.xml
The standard JPA way is src/main/resources/META-INF/persistence.xml:
META-INF/persistence.xml
<persistence xmlns="https://jakarta.ee/xml/ns/persistence" version="3.1">
<persistence-unit name="shopease">
<class>in.shopease.entity.Product</class>
<properties>
<property name="jakarta.persistence.jdbc.url" value="jdbc:h2:mem:shopease"/>
<property name="jakarta.persistence.jdbc.user" value="sa"/>
<property name="jakarta.persistence.jdbc.password" value=""/>
<property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>EntityManagerFactory emf = Persistence.createEntityManagerFactory("shopease");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(new Product("Boat Rockerz 450", new BigDecimal("1499.00"), 120));
em.getTransaction().commit();
em.close();
emf.close();Tip: In real jobs you will almost always use Spring Boot, which builds the EntityManagerFactory for you. Seeing the plain version once helps you understand what Spring does.