>> The InvoiceRepository would be implemented like this: >> [code to load invoices]
> And where do you close those opened sessions using this design? Also, where > did you find a place to implement transaction handling, including joining > into existing transactions if possible? That's the responsibility of the database object. Code will usually look something like this: SomeRepository someRepository = database.getRepository(...); AnotherRepository anotherRepository = database.getRepository(...); database.startTrans(); try { someRepository.update(object); anotherRepository.update(object); database.commit(); } catch (Exception e) { database.rollback(); } All the code for dealing with sessions and transactions is safely tucked away in the database implementation. > These piece of codes are repeating in almost ALL of the Service classes' > business methods, are just flooding all the logic badly :( I'm not sure how you get around the whole transaction thing unless you're in a J2EE server that does that automatically. If you want to get rid of the boilerplate code, you could do something like this: public class Database { <...> public void inTransactionDo(Runnable doRun) { Session session = null; Transaction tx = null; try { session = Hibernator.getSession(); tx = session.beginTransaction(); doRun.run(); tx.commit(); } catch (Exception e) { logger.error (<blah/>), e); tx.rollback(); } finally { if (session != null) session.close(); } <...> } Then your business methods would look like this: database.inTransactionDo(new Runnable() { public void run() { <...business logic here...> } } Regards, John Urberg ------------------------------------------------------- This sf.net email is sponsored by: To learn the basics of securing your web site with SSL, click here to get a FREE TRIAL of a Thawte Server Certificate: http://www.gothawte.com/rd524.html _______________________________________________ hibernate-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/hibernate-devel