Hibernate ORM and Jakarta Persistence in Quarkus — configuration, caching, multitenancy, and modern data access.
How quarkus.hibernate-orm.schema-management.strategy and sql-load-script differ between dev and production profiles, and why production should hand schema control to a migration tool.
How to declare named persistence units backed by separate datasources, scope entities to them, and inject or extend each unit independently via CDI.
How Quarkus auto-detects the Hibernate dialect from your datasource, and how to pin an exact database version or override the dialect explicitly.
The quarkus-hibernate-envers extension records a full change history per entity via @Audited, revision entities, and the AuditReader query API.
How @Cacheable, per-region memory/expiration properties, and the org.hibernate.cacheable query hint work together to enable Hibernate's second-level and query caches in Quarkus.
TenantConnectionResolver lets an application build JDBC connection providers per tenant id at runtime instead of relying on statically configured schemas or datasources.
Quarkus offers three multitenancy strategies (SCHEMA, DATABASE, DISCRIMINATOR) selected via quarkus.hibernate-orm.multitenant, each trading isolation strength for operational simplicity.
Flyway takes over schema versioning from Hibernate by seeding its first migration from Hibernate-generated DDL, then owning every migration afterward.
Interceptor and StatementInspector CDI beans, registered with @PersistenceUnitExtension, let you observe or rewrite entity lifecycle events and SQL statements without touching entities or queries.
Panache offers active-record entities and repository-style alternatives on top of plain Hibernate ORM, with simplified query strings, pagination, and sorting built in.
Jakarta Data lets you declare repository interfaces like CrudRepository and get build-time-generated implementations, custom queries via @Query/@Find, and method-level security.
The hibernate-processor annotation processor generates type-safe metamodel classes so CriteriaBuilder queries reference entity attributes at compile time instead of by string.
How the openapi-generator-gradle-plugin generates JAX-RS resource stubs for a Quarkus server using generatorName=jaxrs-spec and library=quarkus, including Jakarta EE namespacing, MicroProfile OpenAPI annotations, and Mutiny-typed reactive signatures.
Quarkus REST handles multipart/form-data uploads via @RestForm and FileUpload, deserializing mixed text/JSON/file parts in one request with configurable size limits and upload-directory cleanup.
Dev Services auto-launches Testcontainers-backed infrastructure (Postgres, Kafka, Redis, and more) whenever an extension is present but no connection is configured, including privileged init scripts for things like CREATE EXTENSION.
Hibernate Spatial maps JTS geometry types (Point, LineString, Polygon) to native PostGIS columns, so routes and areas can be indexed and queried spatially instead of serialized as JSON or scanned row by row.