persisting rich domain models using nhibernate
DESCRIPTION
Persisting Rich Domain Models Using NHibernate. IStarShip. Agenda. Intro Unit Of Work Identity Map Demos Basics cascade & inverse querying Many-to-many Legacy databases Performance. NHibernate. Origins in Java (Hiberante 2001) First release 2004 Last release 2.1.2 (Nov 2009) - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/1.jpg)
PERSISTING RICH DOMAIN MODELS USING NHIBERNATE
![Page 2: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/2.jpg)
![Page 3: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/3.jpg)
IStarShip
![Page 4: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/4.jpg)
![Page 5: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/5.jpg)
• Intro• Unit Of Work• Identity Map• Demos• Basics• cascade & inverse• querying
• Many-to-many• Legacy databases• Performance
Agenda
![Page 6: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/6.jpg)
• Origins in Java (Hiberante 2001)• First release 2004• Last release 2.1.2 (Nov 2009)• Upcoming 3.0 release (Summer 2010)
• http://nhforge.org/
NHibernate
![Page 7: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/7.jpg)
Transparent persistance
![Page 8: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/8.jpg)
MAPPing
![Page 9: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/9.jpg)
Mapping
![Page 10: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/10.jpg)
ISession ISessionFactory
IQuery & ICriteriaITransaction
![Page 11: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/11.jpg)
ISession
Identity Map/L1 Cache
Unit of Work
![Page 12: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/12.jpg)
maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.
![Page 13: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/13.jpg)
DEMo
![Page 14: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/14.jpg)
idgenerators
increment
identity
sequence
hiloseqhilo
uuid.hexuuid.string
guid
guid.comb
assignednative
foreign
![Page 15: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/15.jpg)
id generator - identity
![Page 16: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/16.jpg)
id generator - hilo
![Page 17: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/17.jpg)
id generator - hilo
![Page 18: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/18.jpg)
PRoxy
![Page 19: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/19.jpg)
PRoxy
![Page 20: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/20.jpg)
PRoxy
![Page 21: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/21.jpg)
Fetch Select / Lazy / N plus 1
![Page 22: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/22.jpg)
Fetch join
![Page 23: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/23.jpg)
inverse false
![Page 24: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/24.jpg)
• none• save-update• delete• delete-orphan• all• all-delete-orphan
Cascade
![Page 25: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/25.jpg)
value objects
![Page 26: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/26.jpg)
Components
![Page 27: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/27.jpg)
Components
![Page 28: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/28.jpg)
Components
![Page 29: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/29.jpg)
• table per class hierarchy• table per subclass• table per concrete class
inheritance
![Page 30: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/30.jpg)
Model
![Page 31: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/31.jpg)
Table PER CLass
![Page 32: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/32.jpg)
concurrency
![Page 33: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/33.jpg)
Concurrency
![Page 34: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/34.jpg)
Concurrency - version
![Page 35: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/35.jpg)
Concurrency - version
![Page 36: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/36.jpg)
Concurrency - timestamp
![Page 37: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/37.jpg)
• Composite primary keys• Relations on non-primary keys• Join• SQL Queries• DB Generated fields
legacy
![Page 38: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/38.jpg)
![Page 39: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/39.jpg)
Property-ref
![Page 40: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/40.jpg)
Sql queries
![Page 41: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/41.jpg)
generated - insert
![Page 42: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/42.jpg)
• Batching• Eager loading (eliminate N+1)• Query Cache• L2 Cache
performance
![Page 43: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/43.jpg)
Batching
![Page 44: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/44.jpg)
Batching
![Page 45: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/45.jpg)
NHibernate = endless number of features
i could go on an on...
![Page 46: Persisting Rich Domain Models Using NHibernate](https://reader035.vdocuments.net/reader035/viewer/2022062501/568163a3550346895dd4aa3b/html5/thumbnails/46.jpg)
• http://nhforge.org/• http://ayende.com/blog• http://www.codinginstinct.com• http://sharparchitecture.net/
resources
http://tlo.googlecode.com/svn/trunk/presentations/nhibernate_elevate