Justify for JPA

This class is approximately 2/3rds hands-on lab exercises and normally runs two-days using EclipseLink JPA as provider with an optional third-day for third-party extensions and related topics.

JPA hands-on Topical Syllabus

General Information

  • How to configure EclipseLink
    • Declarative using persistence.xml
    • Programmaticly using EntityManagerFactory
  • How to use JPA outside-the-container (i.e. JUnit Testing)
  • How to use the JPA EntityManager API
  • How to extend the EntityManager
  • How to use Optimistic Locking
  • How to enable Database Auditing
  • How to Optimize Performance/Scalability
    • How to optimize an Object Model design
    • How to use Multicore Processing
    • How to use Load Balancing, Replication and Data Partitioning
  • How to access multiple databases from a single composite Persistence Unit

Cache Management

  • How to use caching
    • L1 – Persistence Context
    • L2 – Shared Cache
  • How to enable Cache Coordination : for caching in a cluster.

Diagnostics/Trouble Shooting

  • How to configure logging
  • How to configure a third party custom logger
  • How to validate metadata against the database
  • How to enable performance monitoring and metrics

Schema Management

  • How to automatically Generate DDL and Create Tables for a persistence unit
  • How to use Cascading
  • How to use a multi-tenant Shared Schema

Object Relational Mapping

  • How to use annotations for Mapping
  • How to configure Identity (primary key) Generation
    • System Assign
    • UUID
  • How to define inheritance
  • How to preserve collection ordering (JPA 1.0)
  • How to map relationships based on an Expression instead of foreign keys
  • How to Archive Records instead of deleting them (soft deletes)

Query Management

  • How to execute Queries
    • Find Operations
    • Named Queries
    • Native Queries
    • Criteria Queries
    • Stored Procedure Queries
  • How to Page query results
  • How to optimize queries using Batch and Join fetching
  • How to use FetchGroups and LoadGroups on queries, and for copying and merging

Transaction Management

  • How to abstract the Persistence Transaction API
  • How to use Pessimistic Locking
  • How to integrate with JTA

JPA Advanced Topics

  • How to use Map key columns to map complex Maps
  • How to use derived identifiers to map composite Ids through ManyToOne relationships
  • How to map collections of Basic or Embeddable values using ElementCollection mapping
  • How to maintain order in a List relationship using an OrderColumn
  • How to define dynamic queries using the Criteria API
  • How to enable Bulk Updates
  • How use JPQL Functions
  • How to enable CDI Entity Listeners
  • How to use a Treat
  • How to use Converters
  • How to use Entity Graphs
  • How to use Unsynchronized Persistence Contexts
  • How to use a Metamodel


  • How to access NoSQL databases such as MongoDB
  • Polyglot Persistence (Relational and NoSQL)