- Notifications
You must be signed in to change notification settings - Fork3.7k
Hibernate's core Object/Relational Mapping functionality
License
hibernate/hibernate-orm
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Hibernate ORM is a powerful object/relational mapping solution for Java, and makes it easy to develop persistence logic for applications, libraries, and frameworks.
Hibernate implements JPA, the standard API for object/relational persistence in Java, but also offers an extensive set of features and APIs which go beyond the specification.
SeeHibernate.org for more information.
SeeMAINTAINERS.md for information about CI.
The build requires at least JDK 21, and produces Java 17 bytecode.
Hibernate usesGradle as its build tool. See theGradle Primer section below if you are new toGradle.
Contributors should read theContributing Guide.
The Gradle build tool has amazing documentation. 2 in particular that are indispensable:
Gradle User Guide is a typical user guide in thatit follows a topical approach to describing all of the capabilities of Gradle.
Gradle DSL Guide is unique and excellent in quicklygetting up to speed on certain aspects of Gradle.
We will cover the basics developers and contributors new to Gradle need to know to get productive quickly.
Note | The project defines aGradle Wrapper.The rest of the section will assume execution through the wrapper. |
Gradle uses the concept of build tasks (equivalent to Ant targets or Maven phases/goals). You can get a list ofavailable tasks via
gradle tasks
To execute a task across all modules, simply perform that task from the root directory. Gradle will visit eachsub-project and execute that task if the sub-project defines it. To execute a task in a specific module you caneither:
cd
into that module directory and execute the taskname the "task path". For example, to run the tests for thehibernate-core module from the root directoryyou could say
gradle hibernate-core:test
The common tasks you might use in building Hibernate include:
build - Assembles (jars) and tests this project
compile - Performs all compilation tasks including staging resources from both main and test
jar - Generates a jar archive with all the compiled classes
test - Runs the tests
publishToMavenLocal - Installs the project jar to your local maven cache (aka ~/.m2/repository). Note that Gradlenever uses this, but it can be useful for testing your build with other local Maven-based builds.
clean - Cleans the build directory
Testing against a specific database can be achieved in 2 different ways:
The Hibernate build defines several database testing "profiles" indatabases.gradle
. Theseprofiles can be activated by name using thedb
build property which can be passed either asa JVM system prop (-D
) or as a Gradle project property (-P
). Examples below use the Gradleproject property approach.
gradle clean build -Pdb=pgsql
To run a test from your IDE, you need to ensure the property expansions happen.Use the following command:
gradle clean compile -Pdb=pgsql
NOTE: If you are running tests against a JDBC driver that is not available via Maven central be sure toadd these drivers to your local Maven repo cache (~/.m2/repository) or (better) add it to a personal Maven repo server
You can run any test on any particular database that is configured in adatabases.gradle
profile.
All you have to do is run the following command:
./gradlew setDataBase -Pdb=pgsql
or you can use the shortcut version:
./gradlew sDB -Pdb=pgsql
You can do this from the module which you are interested in testing or from thehibernate-orm
root folder.
Afterward, just pick any test from the IDE and run it as usual. Hibernate will pick the database configuration from thehibernate.properties
file that was set up by thesetDataBase
Gradle task.
You don’t have to install all databases locally to be able to test against them in case you have docker available.The scriptdocker_db.sh
allows you to start a pre-configured database which can be used for testing.
All you have to do is run the following command:
./docker_db.sh postgresql
omitting the argument will print a list of possible options.
When the database is properly started, you can run tests with special profiles that are suffixed with_ci
e.g.pgsql_ci
for PostgreSQL. By using the system propertydbHost
you can configure the IP address of your docker host.
The command for running tests could look like the following:
./gradlew test -Pdb=pgsql_ci "-DdbHost=192.168.99.100"
The following table illustrates a list of commands for various databases that can be tested locally.
Database | docker_db.sh | Gradle command |
---|---|---|
H2 | - |
|
HSQLDB | - |
|
Apache Derby | - |
|
MySQL |
|
|
MariaDB |
|
|
PostgreSQL |
|
|
EnterpriseDB |
|
|
Oracle |
|
|
DB2 |
|
|
SQL Server |
|
|
Sybase ASE (jTDS) |
|
|
Sybase ASE (jConnect) |
|
|
SAP HANA |
|
|
CockroachDB |
|
|
TiDB |
|
|
Informix |
|
|
To stop a container started bydocker
, use the command
docker stop $container_name
- NOTE
Substitute
podman
command fordocker
if usingpodman
E.g., to stop the mariadb container
docker stop mariadb
About
Hibernate's core Object/Relational Mapping functionality
Topics
Resources
License
Code of conduct
Uh oh!
There was an error while loading.Please reload this page.