10.1. Common Persistence Strategies10.1.1. An Overview of Persistence Patterns10.1.2. Popular J2EE Data Access Solutions10.1.3. Choosing a Persistence Strategy10.1.3.1. When to Choose O/R Mapping10.1.3.2. Caching of Persistent Data10.1.4. Transparent Persistence and Behavior in Domain Objects10.2. A Brief History of Java Persistence Technologies10.2.1. The Slow Rise of Java O/R Mapping Solutions10.2.1.1. 1997-1998: TopLink, CocoBase, ODMG10.2.1.2. 1999-2001: Entity Beans, JDO10.2.1.3. 2002-2003: TopLink, Hibernate, iBATIS Database Layer10.2.1.4. 2004: JDO Evolves; Hibernate Flourishes10.2.2. The Failure of Entity Beans10.3. Data Access Technologies in Practice10.3.1. Resource Handling10.3.2. JDBC10.3.2.1. Example Code10.3.3. iBATIS SQL Maps10.3.3.1. Example Code10.3.4. JDO10.3.4.1. Example Code10.3.4.2. State Management10.3.4.3. Identity Management10.3.5. Hibernate10.3.5.1. Example Code10.3.5.2. State Management10.3.5.3. Lazy Loading10.4. The Data Access Object Pattern10.4.1. Business Objects and Data Access Objects10.4.2. DAOs and Transparent Persistence10.4.3. Types of Data Access Objects10.4.4. DAO Design Issues10.4.4.1. Granularity of Data Access Operations10.4.4.2. Transparent Persistence and Object State10.4.4.3. Transaction Scopes and Lazy Loading10.4.5. DAO Infrastructure Issues10.5. Data Access with the Spring Framework10.5.1. Generic Data Access Exceptions10.5.2. Business Objects and Data Access Objects Revisited10.5.2.1. Transactional Objects10.5.3. JDBC10.5.3.1. JDBC Access via a Template10.5.3.2. "RDBMS Operation" Objects10.5.4. iBATIS SQL Maps10.5.4.1. SQL Map Access via a Template10.5.5. JDO10.5.5.1. JDO Access via a Template10.5.5.2. JDO Access with an Interceptor10.5.6. Hibernate10.5.6.1. Hibernate Access via a Template10.5.6.2. HibernateTemplate Convenience Methods10.6. Summary