|
PerformanceLazy initialization
Outer join fetchingto initialize a graph of associated objects in a single select (for databases with ANSI-style or Oracle-style outerjoins) Batch fetchingAssociation roles may be fetched predictively, by batch Subselect fetchingCollections may be fetched efficiently using a subselect Support for optimistic locking with versioning/timestampingAllows a single conversation (Session) to extend across multiple database connections / transactions without sacrificing transaction isolation. Version numbers / timestamps are updated automatically by Hibernate. Highly scalable architectureDesigned from the ground up to work in a cluster. Unless the second-level cache is used, there is essentially NO synchronization used in the entire persistence layer. Transaction isolation is guaranteed by the way Hibernate integrates with database / JTA transactions. High performanceMinimal overhead compared to direct JDBC. SQL generated at system initialization timerather than at runtime (or buildtime) Transactional write-behind, and transparent JDBC batchingSince Hibernate executes SQL asynchrously, it is able to transparently make use of the JDBC batch update API for insert, update and delete Optional "tuned" INSERT and UPDATEINSERT and UPDATE SQL may be generated dynamically, including only those columns that are needed Property level lazy fetching via build-time bytecode instrumentation(Buildtime bytecode instrumentation is fully optional, and almost never necessary) Support for update by ROWID on OracleBuilt-in support for various powerful open source JDBC connection pools and cache implementationsIncluding C3P0, Proxool, JBossCache, EHCache, OSCache, SwarmCache [Hibernate 3.1] Stateless session API for bulk/batch processingAllows streaming inserts or updates of large datasets |
|||||||||||||