453fad0ee72eb1d08f228e9870f5e6f1bd7a1ee1
Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_017ic4b7jUQrypvpE1ix1k7V
Hibernate 8 + Jakarta Persistence 4: EntityAgent demo
Runnable companion to the ankurm.com article on EntityAgent and stateless sessions.
Every number in the article comes from a file in output/, and each of those files is
written by a test that asserts the same numbers, so a figure that stops being true fails the build.
Versions tested
| Component | Version |
|---|---|
| Hibernate ORM | 8.0.0.CR1 (release candidate, 12 Nov 2026) |
| Jakarta Persistence API | 4.0.0-M8 (milestone, resolved transitively by CR1) |
| JDK | Temurin 25.0.5+8 |
| H2 | 2.5.252 |
| HSQLDB (test scope, comparison runs) | 2.7.4 |
| JUnit | 6.1.3 |
| Maven | 3.9.11 |
Hibernate 8 and Jakarta Persistence 4 are pre-release. Assertions in Demo05Test and Demo09Test
are deliberately pinned to CR1 behaviour, so they fail when a later build changes it.
Run it
./scripts/run-all.sh
Layout
| Path | What it shows |
|---|---|
src/main/java/com/ankurm/agent/ |
Book, Publisher, Setting entities and the BookSummary record |
src/test/java/com/ankurm/agent/Lab.java |
boots a SessionFactory and records every prepared SQL statement |
Demo01Test |
same edit through EntityManager and EntityAgent |
Demo02Test |
get() vs find(), no first-level cache, getMultiple() |
Demo03Test |
lazy associations and fetch() |
Demo04Test |
bulk insert: persistence-context size and statements prepared |
Demo05Test |
lock modes on a stateless handler, H2 and HSQLDB |
Demo06Test |
@ExcludedFromVersioning |
Demo07Test |
programmatic result set mappings |
Demo08Test |
upsert(), delete(), duplicate-key exception |
Demo09Test |
the same operations on H2 and HSQLDB |
Captured output
output/01-entitymanager-vs-entityagent.txt, 02-get-find-and-no-cache,
03-lazy-associations-and-fetch, 04-bulk-insert, 05-lock-modes-in-entityagent,
06-excluded-from-versioning, 07-programmatic-result-set-mapping,
08-upsert-delete-and-errors, 09-same-operations-two-databases.
Languages
Java
99.4%
Shell
0.6%