HIBERNATE IN ACTION
CONTENTS UNDERSTANDING OBJECT/RELATIONAL PERSISTENCE WHAT IS PERSISTENCE? RELATIONAL DATABASES ?UNDERSTANDING SQL ?USING SQL IN JAVA ?PERSISTENCE IN OBJECT-ORIENTED APPLICATIONS THE PARADIGM MISMATCH THE PROBLEM OF GRANULARITY ?THE PROBLEM OF SUBTYPES THE PROBLEM OF IDENTITY ?PROBLEMS RELATING TO ASSOCIATIONS THE PROBLEM OF OBJECT GRAPH NAVIGATION ?THE COST OF THE MISMATCH PERSISTENCE LAYERS AND ALTERNATIVES LAYERED ARCHITECTURE ?HAND-CODING A PERSISTENCE LAYER WITH SQL/JDBC ?USING SERIALIZATION ?CONSIDERING EJB ENTITY BEANS ?OBJECT-ORIENTED DATABASE SYSTEMS OTHER OPTIONS OBJECT/RELATIONAL MAPPING WHAT IS ORM? ?GENERIC ORM PROBLEMS WHY ORM? SUMMARY INTRODUCING AND INTEGRATING HIBERNATE “HELLO WORLD” WITH HIBERNATE UNDERSTANDING THE ARCHITECTURE THE CORE INTERFACES ?CALLBACK INTERFACES TYPES ?EXTENSION INTERFACES BASIC CONFIGURATION CREATING A SESSIONFACTORY ?CONFIGURATION IN NON-MANAGED ENVIRONMENTS ?CONFIGURATION IN MANAGED ENVIRONMENTS ADVANCED CONFIGURATION SETTINGS USING XML-BASED CONFIGURATION ?JNDI-BOUND SESSIONFACTORY ?LOGGING ?JAVA MANAGEMENT EXTENSIONS (JMX) MAPPING PERSISTENT CLASSES THE CAVEATEMPTOR APPLICATION ANALYZING THE BUSINESS DOMAIN THE CAVEATEMPTOR DOMAIN MODEL IMPLEMENTING THE DOMAIN MODEL ADDRESSING LEAKAGE OF CONCERNS ?TRANSPARENT AND AUTOMATED PERSISTENCE ?WRITING POJOS IMPLEMENTING POJO ASSOCIATIONS ?ADDING LOGIC TO ACCESSOR METHODS DEFINING THE MAPPING METADATA METADATA IN XML ?BASIC PROPERTY AND CLASS MAPPINGS ?ATTRIBUTE-ORIENTED PROGRAMMING MANIPULATING METADATA AT RUNTIME UNDERSTANDING OBJECT IDENTITY IDENTITY VERSUS EQUALITY ?DATABASE IDENTITY WITH HIBERNATE ?CHOOSING PRIMARY KEYS FINE-GRAINED OBJECT MODELS ENTITY AND VALUE TYPES ?USING COMPONENTS MAPPING CLASS INHERITANCE TABLE PER CONCRETE CLASS ?TABLE PER CLASS HIERARCHY TABLE PER SUBCLASS ?CHOOSING A STRATEGY INTRODUCING ASSOCIATIONS MANAGED ASSOCIATIONS? ?MULTIPLICITY THE SIMPLEST POSSIBLE ASSOCIATION ?MAKING THE ASSOCIATION BIDIRECTIONAL ?A PARENT/CHILD RELATIONSHIP WORKING WITH PERSISTENT OBJECTS THE PERSISTENCE LIFECYCLE TRANSIENT OBJECTS ?PERSISTENT OBJECTS ?DETACHED OBJECTS ?THE SCOPE OF OBJECT IDENTITY ?OUTSIDE THE IDENTITY SCOPE ?IMPLEMENTING EQUALS() AND HASHCODE() THE PERSISTENCE MANAGER MAKING AN OBJECT PERSISTENT ?UPDATING THE PERSISTENT STATE OF A DETACHED INSTANCE ?RETRIEVING A PERSISTENT OBJECT UPDATING A PERSISTENT OBJECT ?MAKING A PERSISTENT OBJECT TRANSIENT ?MAKING A DETACHED OBJECT TRANSIENT USING TRANSITIVE PERSISTENCE IN HIBERNATE PERSISTENCE BY REACHABILITY ?CASCADING PERSISTENCE WITH HIBERNATE ?MANAGING AUCTION CATEGORIES DISTINGUISHING BETWEEN TRANSIENT AND DETACHED INSTANCES RETRIEVING OBJECTS RETRIEVING OBJECTS BY IDENTIFIER ?INTRODUCING HQL QUERY BY CRITERIA ?QUERY BY EXAMPLE ?FETCHING STRATEGIES ?SELECTING A FETCHING STRATEGY IN MAPPINGS TUNING OBJECT RETRIEVAL TRANSACTIONS, CONCURRENCY, AND CACHING UNDERSTANDING DATABASE TRANSACTIONS JDBC AND JTA TRANSACTIONS ?THE HIBERNATE TRANSACTION API ?FLUSHING THE SESSION ?UNDERSTANDING ISOLATION LEVELS ?CHOOSING AN ISOLATION LEVEL ?SETTING AN ISOLATION LEVEL ?USING PESSIMISTIC LOCKING WORKING WITH APPLICATION TRANSACTIONS USING MANAGED VERSIONING ?GRANULARITY OF A SESSION ?OTHER WAYS TO IMPLEMENT OPTIMISTIC LOCKING CACHING THEORY AND PRACTICE CACHING STRATEGIES AND SCOPES ?THE HIBERNATE CACHE ARCHITECTURE ?CACHING IN PRACTICE ADVANCED MAPPING CONCEPTS UNDERSTANDING THE HIBERNATE TYPE SYSTEM BUILT-IN MAPPING TYPES ?USING MAPPING TYPES MAPPING COLLECTIONS OF VALUE TYPES SETS, BAGS, LISTS, AND MAPS MAPPING ENTITY ASSOCIATIONS ONE-TO-ONE ASSOCIATIONS ?MANY-TO-MANY ASSOCIATIONS MAPPING POLYMORPHIC ASSOCIATIONS POLYMORPHIC MANY-TO-ONE ASSOCIATIONS ?POLYMORPHIC COLLECTIONS ?POLYMORPHIC ASSOCIATIONS AND TABLE-PER- CONCRETE-CLASS RETRIEVING OBJECTS EFFICIENTLY EXECUTING QUERIES THE QUERY INTERFACES ?BINDING PARAMETERS USING NAMED QUERIES BASIC QUERIES FOR OBJECTS THE SIMPLEST QUERY ?USING ALIASES ?POLYMORPHIC QUERIES ?RESTRICTION ?COMPARISON OPERATORS STRING MATCHING ?LOGICAL OPERATORS ?ORDERING QUERY RESULTS JOINING ASSOCIATIONS HIBERNATE JOIN OPTIONS ?FETCHING ASSOCIATIONS USING ALIASES WITH JOINS ?USING IMPLICIT JOINS THETA-STYLE JOINS ?COMPARING IDENTIFIERS WRITING REPORT QUERIES PROJECTION ?USING AGGREGATION ?GROUPING RESTRICTING GROUPS WITH HAVING ?IMPROVING PERFORMANCE WITH REPORT QUERIES ADVANCED QUERY TECHNIQUES DYNAMIC QUERIES ?COLLECTION FILTERS SUBQUERIES ?NATIVE SQL QUERIES OPTIMIZING OBJECT RETRIEVAL SOLVING THE N+1 SELECTS PROBLEM ?USING ITERATE() QUERIES ?CACHING QUERIES WRITING HIBERNATE APPLICATIONS DESIGNING LAYERED APPLICATIONS USING HIBERNATE IN A SERVLET ENGINE USING HIBERNATE IN AN EJB CONTAINER IMPLEMENTING APPLICATION TRANSACTIONS APPROVING A NEW AUCTION ?DOING IT THE HARD WAY USING DETACHED PERSISTENT OBJECTS ?USING A LONG SESSION CHOOSING AN APPROACH TO APPLICATION TRANSACTIONS HANDLING SPECIAL KINDS OF DATA LEGACY SCHEMAS AND COMPOSITE KEYS ?AUDIT LOGGING USING THE TOOLSET DEVELOPMENT PROCESSES TOP DOWN ?BOTTOM UP ?MIDDLE OUT (METADATA ORIENTED) ?MEET IN THE MIDDLE ROUNDTRIPPING AUTOMATIC SCHEMA GENERATION PREPARING THE MAPPING METADATA ?CREATING THE SCHEMA ?UPDATING THE SCHEMA GENERATING POJO CODE ADDING META-ATTRIBUTES ?GENERATING FINDERS CONFIGURING HBM2JAVA ?RUNNING HBM2JAVA EXISTING SCHEMAS AND MIDDLEGEN STARTING MIDDLEGEN ?RESTRICTING TABLES AND RELATIONSHIPS ?CUSTOMIZING THE METADATA GENERATION GENERATING HBM2JAVA AND XDOCLET METADATA XDOCLET SETTING VALUE TYPE ATTRIBUTES ?MAPPING ENTITY ASSOCIATIONS ?RUNNING XDOCLET