Hibernate In Practice

  • Uploaded by: Gopinath
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Hibernate In Practice as PDF for free.

More details

  • Words: 891
  • Pages: 24
Hibernate in Practice Rob Harrop

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Introductions • • • •

Rob Harrop VP, Interface21 Core developer on Spring Frequent presenter (JUGs, JavaOne, JavaPolis, OSCON...) • Consultant with Fortune 500 clients (mainly banking) and government • Author of best-selling Pro Spring

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Agenda • What you need to know to be effective – Mapping object graphs – Session management – Fetching strategies

• Hibernate favourites – Criteria API – Testing

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

What you need to know to be effective • Getting started with Hibernate is easy • Unfortunately, so is getting it wrong! • Mastering some central concepts makes success much more likely – Domain mapping – Session handling – Fetching

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Mapping object graphs • Aims – Loose coupling – High cohesion – Accurate mapping of the domain

• Avoid – Total navigability – Relationships to simplify queries

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Comparing Mapping Styles

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Comparing Mapping Styles

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Mapping object graphs • Encapsulate structural logic – Support code evolution – Provide a cleaner API

• Avoid mapping every relationship – Reduce coupling – Ease maintenance

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Session Management • Session handling can make or break an application • Too fine-grained and you lose any performance benefits and real transparent persistence • Too coarse-grained and you risk memory usage problems and slow flushes.

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Session per Operation • Do not do this!

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Options • Session per transaction – Session lifecycle is synchronized with transaction boundary – Do not use transaction per operation :)

• Long running session – Sessions live across multiple transactions

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Issues with Long Running Sessions • Memory usage – Keep Sessions around in memory

• Unexpected flushes • Manual management patterns – Filter/ThreadLocal

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Session per transaction • Sessions live for the duration of a transaction • DAOs share the same session and transaction • Sessions and transactions are managed transparently – Do not pass them around in method signatures

• This gives a clean unit of work within which persistence logic can be handled

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Session per transaction

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Open Session in View • • • •

Steer clear wherever possible Unclear transactional boundaries Potential for incorrect data Real potential for poor performance – n+1 selects

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Fetch Joins • Fetch joins allows eager loading to be selected on a per association, per query basis – No need to make everything eager – No need to use OSiV

• Typically associations are lazy by default and then eagerly fetched as needed

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Nuances with Fetch Joins • Unexpected number of results • The exact number of queries may surprise you

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Criteria API • Programmatic construction of queries • Support for all common operators – =, <>, >, <, IN, EXISTS, BETWEEN, LIKE

• Full support for projections • Support for custom SQL – Projection and selection

• Additional features – Paging, sorting, grouping

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Criteria API • Simple query Criteria c = session.createCriteria(Product.class); c.add(Restrictions.eq("name", value)); return c.list();

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Criteria API • Query and projection Criteria c = session.createCriteria(Product.class); c.add(eq("name", value)); c.setProjection(distinct(property("name")));

Static imports from Projections Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Criteria API • Using SQL Criteria c = session.createCriteria(Product.class); c.add(sqlRestriction("{alias}.name = ?", value, Hibernate.STRING)); return c.list();

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

When to use the Criteria API • Ad-hoc querying • Saved queries • Conditional queries

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Testing • Testing tools: – DBUnit – Spring Mock

• Testing strategy – Test with Hibernate – Verify with JDBC – Work against known sets of data

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Useful Resources • http://ww.hibernate.org/hib_docs/v3/reference/en/html/ • Java Persistence with Hibernate (King, Bauer) • DBUnit - http://dbunit.sourceforge.net/

Copyright 2004-2006, Interface21 Ltd. Copying, publishing, or distributing without expressed written permission is prohibited.

Related Documents

Hibernate In Practice
June 2020 3
Hibernate
May 2020 20
Hibernate
November 2019 32
Hibernate
November 2019 25
Hibernate
April 2020 11
Hibernate
November 2019 20

More Documents from ""