High-performance Java Persistence.pdf Page
Whether your application is .
The L2 cache survives across database transactions and application sessions. It is ideal for data that is read frequently but modified rarely (e.g., country codes, product catalogs).
Use Bulk Updates .
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "book_seq") @SequenceGenerator(name = "book_seq", sequenceName = "book_sequence", allocationSize = 50) private Long id; Use code with caution. Bidirectional Associations
Blocks concurrent threads, reduces throughput, and introduces the risk of database deadlocks if transactions acquire locks in inconsistent orders. Summary Checklist for High Performance Optimization Goal Actionable Steps Connections Minimize latency High-performance Java Persistence.pdf
Use READ_ONLY for immutable data, and READ_WRITE or TRANSACTIONAL for mutable data depending on your consistency requirements. 6. Concurrency Control and Locking
Configure connection pools to hand out physical database connections only when an actual SQL statement executes, rather than when a logical transaction begins.
Generally preferred. It ensures data is loaded only when accessed.
Guarantees data safety for high-contention operations (e.g., inventory management, financial balances). Whether your application is
Dangerous, as it can pull in the entire database graph. Avoid it, especially for @OneToMany or @ManyToMany relationships.
Use GenerationType.SEQUENCE alongside a pool size optimizer (like pooled or pooled-lo ). This allows Hibernate to allocate a block of IDs in memory before sending a single insert statement, keeping batching intact.
Caches the identifiers of entities returned by a specific query. It must be paired with the second-level cache to avoid an N+1 problem during cache resolution. 5. Transaction and Concurrency Control
spring.jpa.properties.hibernate.jdbc.batch_size=20 spring.jpa.properties.hibernate.order_inserts=true spring.jpa.properties.hibernate.order_updates=true Use code with caution. Use Bulk Updates
JDBC batching groups multiple identical SQL statements into a single network packet, radically reducing network roundtrips.
Default to LAZY fetching; use JOIN FETCH or DTO projections. Maximize Throughput
High-performance Java persistence cannot ignore the database engine itself.