ebook img

High-Performance Java Persistence PDF

461 Pages·2020·18.596 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview High-Performance Java Persistence

High-Performance Java Persistence Get the most out of your persistence layer Vlad Mihalcea Thisbookisforsaleathttp://leanpub.com/high-performance-java-persistence Thisversionwaspublishedon2020-06-09 ThisisaLeanpubbook.LeanpubempowersauthorsandpublisherswiththeLeanPublishing process.LeanPublishingistheactofpublishinganin-progressebookusinglightweight toolsandmanyiterationstogetreaderfeedback,pivotuntilyouhavetherightbookand buildtractiononceyoudo. ©2015-2020VladMihalcea Tweet This Book! PleasehelpVladMihalceabyspreadingthewordaboutthisbookonTwitter! Thesuggestedtweetforthisbookis: Justbought”High-PerformanceJavaPersistence” https://leanpub.com/high-performance-java-persistence/by@vlad_mihalcea#Java#JPA #Hibernate Tomywifeandkids Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii Thedatabaseserverandtheconnectivitylayer . . . . . . . . . . . . . . . . . . . . . . . . iii Theapplicationdataaccesslayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii TheORMframework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii Thenativequerybuilderframework . . . . . . . . . . . . . . . . . . . . . . . . . . . iv VideoCourse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Testimonials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v I JDBC and Database Essentials . . . . . . . . . . . . . . . . . . . 1 1. PerformanceandScaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1 Responsetimeandthroughput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Databaseconnectionsboundaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 Scalingupandscalingout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3.1 Master-Slavereplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3.2 Multi-Masterreplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.3 Sharding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2. JDBCConnectionManagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1 DriverManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2 DataSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2.1 Whyispoolingsomuchfaster? . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3 Queuingtheorycapacityplanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.4 Practicaldatabaseconnectionprovisioning . . . . . . . . . . . . . . . . . . . . . . . 23 2.4.1 Areal-lifeconnectionpoolmonitoringexample . . . . . . . . . . . . . . 24 2.4.1.1 Concurrentconnectionrequestcountmetric . . . . . . . . . 25 2.4.1.2 Concurrentconnectioncountmetric . . . . . . . . . . . . . . . 26 2.4.1.3 Maximumpoolsizemetric . . . . . . . . . . . . . . . . . . . . . . 27 2.4.1.4 Connectionacquisitiontimemetric . . . . . . . . . . . . . . . . 27 2.4.1.5 Retryattemptsmetric . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.4.1.6 Overallconnectionacquisitiontimemetric . . . . . . . . . . . 28 2.4.1.7 Connectionleasetimemetric . . . . . . . . . . . . . . . . . . . . 29 3. BatchUpdates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.1 BatchingStatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2 BatchingPreparedStatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 CONTENTS 3.2.1 Choosingtherightbatchsize . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.2.2 Bulkprocessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.3 Retrievingauto-generatedkeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.3.1 Sequencestotherescue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4. StatementCaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.1 Statementlifecycle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.1.1 Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.1.2 Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.1.2.1 Executionplanvisualization . . . . . . . . . . . . . . . . . . . . . 45 4.1.3 Executor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.2 Cachingperformancegain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.3 Server-sidestatementcaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.3.1 Bind-sensitiveexecutionplans . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.4 Client-sidestatementcaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5. ResultSetFetching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.1 ResultSetscrollability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.2 ResultSetchangeability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3 ResultSetholdability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.4 Fetchingsize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.5 ResultSetsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.5.1 Toomanyrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.5.1.1 SQLlimitclause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.5.1.2 JDBCmaxrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.5.1.3 Lessismore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.5.2 Toomanycolumns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6. Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6.1 Atomicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.2 Consistency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 6.3 Isolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.3.1 Concurrencycontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.3.1.1 Two-phaselocking . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.3.1.2 Multi-VersionConcurrencyControl . . . . . . . . . . . . . . . . 81 6.3.2 Phenomena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.3.2.1 Dirtywrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 6.3.2.2 Dirtyread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 6.3.2.3 Non-repeatableread . . . . . . . . . . . . . . . . . . . . . . . . . . 87 6.3.2.4 Phantomread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 6.3.2.5 Readskew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6.3.2.6 Writeskew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.3.2.7 Lostupdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.3.3 Isolationlevels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.3.3.1 ReadUncommitted . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 6.3.3.2 ReadCommitted . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 CONTENTS 6.3.3.3 RepeatableRead. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 6.3.3.4 Serializable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.4 Durability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.5 Read-onlytransactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.5.1 Read-onlytransactionrouting . . . . . . . . . . . . . . . . . . . . . . . . . . 103 6.6 Transactionboundaries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.6.1 Distributedtransactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 6.6.1.1 Two-phasecommit. . . . . . . . . . . . . . . . . . . . . . . . . . . 108 6.6.2 Declarativetransactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6.7 Application-leveltransactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 6.7.1 Pessimisticandoptimisticlocking . . . . . . . . . . . . . . . . . . . . . . . 114 6.7.1.1 Pessimisticlocking . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.7.1.2 Optimisticlocking . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 II JPA and Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 7. WhyJPAandHibernatematter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 7.1 Theimpedancemismatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 7.2 JPAvs.Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 7.3 Schemaownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 7.4 Entitystatetransitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 7.5 Write-basedoptimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.6 Read-basedoptimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.7 Wrap-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 8. ConnectionManagementandMonitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 8.1 JPAconnectionmanagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 8.2 Hibernateconnectionproviders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 8.2.1 DriverManagerConnectionProvider . . . . . . . . . . . . . . . . . . . . . . 135 8.2.2 C3P0ConnectionProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 8.2.3 HikariCPConnectionProvider . . . . . . . . . . . . . . . . . . . . . . . . . . 136 8.2.4 DatasourceConnectionProvider . . . . . . . . . . . . . . . . . . . . . . . . . 137 8.2.5 Connectionreleasemodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 8.3 Monitoringconnections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.3.1 Hibernatestatistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 8.3.1.1 Customizingstatistics . . . . . . . . . . . . . . . . . . . . . . . . . 143 8.4 Statementlogging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 8.4.1 Statementformatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 8.4.2 Statement-levelcomments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 8.4.3 Loggingparameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 8.4.3.1 DataSource-proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 8.4.3.2 P6Spy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 9. MappingTypesandIdentifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 9.1 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 CONTENTS 9.1.1 Primitivetypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 9.1.2 Stringtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 9.1.3 DateandTimetypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 9.1.4 Numerictypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 9.1.5 Binarytypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 9.1.6 UUIDtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 9.1.7 Othertypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.1.8 Customtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.2 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 9.2.1 UUIDidentifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 9.2.1.1 Theassignedgenerator . . . . . . . . . . . . . . . . . . . . . . . . 166 9.2.2 ThelegacyUUIDgenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 9.2.2.1 ThenewerUUIDgenerator . . . . . . . . . . . . . . . . . . . . . 167 9.2.3 Numericalidentifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 9.2.3.1 Identitygenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 9.2.3.2 Sequencegenerator . . . . . . . . . . . . . . . . . . . . . . . . . . 170 9.2.3.3 Tablegenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 9.2.3.4 Optimizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 9.2.3.4.1 Thehi/loalgorithm . . . . . . . . . . . . . . . . . . . . . . . . . 174 9.2.3.4.2 Thedefaultsequenceidentifiergenerator . . . . . . . . . . 176 9.2.3.4.3 Thedefaulttableidentifiergenerator . . . . . . . . . . . . . 177 9.2.3.4.4 Thepooledoptimizer . . . . . . . . . . . . . . . . . . . . . . . . 178 9.2.3.4.5 Thepooled-looptimizer . . . . . . . . . . . . . . . . . . . . . . 180 9.2.3.5 Optimizergain. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 9.2.3.5.1 Sequencegeneratorperformancegain . . . . . . . . . . . . . 181 9.2.3.5.2 Tablegeneratorperformancegain . . . . . . . . . . . . . . . 182 9.2.3.6 Identifiergeneratorperformance . . . . . . . . . . . . . . . . . 182 10. Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 10.1 Relationshiptypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 10.2 @ManyToOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 10.3 @OneToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 10.3.1 Bidirectional@OneToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 10.3.2 Unidirectional@OneToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 10.3.3 Orderedunidirectional@OneToMany . . . . . . . . . . . . . . . . . . . . . 197 10.3.4 @OneToManywith@JoinColumn . . . . . . . . . . . . . . . . . . . . . . . . 199 10.3.5 Unidirectional@OneToManySet . . . . . . . . . . . . . . . . . . . . . . . . 201 10.4 @ElementCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 10.4.1 @ElementCollectionList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 10.4.2 @ElementCollectionSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 10.5 @OneToOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 10.5.1 Unidirectional@OneToOne. . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 10.5.2 Bidirectional@OneToOne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 10.6 @ManyToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 10.6.1 Unidirectional@ManyToManyList . . . . . . . . . . . . . . . . . . . . . . . 212 10.6.2 Unidirectional@ManyToManySet . . . . . . . . . . . . . . . . . . . . . . . 214 CONTENTS 10.6.3 Bidirectional@ManyToMany . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 10.6.4 The@OneToManyalternative . . . . . . . . . . . . . . . . . . . . . . . . . . 216 10.7 HypersistenceOptimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 10.7.1 Testimonials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 11. Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 11.1 Singletable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 11.1.1 Dataintegrityconstraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 11.2 Jointable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 11.3 Table-per-class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 11.4 Mappedsuperclass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 12. Flushing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 12.1 Flushmodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 12.2 Eventsandtheactionqueue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 12.2.1 Flushoperationorder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 12.3 DirtyChecking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 12.3.1 Thedefaultdirtycheckingmechanism . . . . . . . . . . . . . . . . . . . . 253 12.3.1.1 ControllingthePersistenceContextsize . . . . . . . . . . . . . 254 12.3.2 Bytecodeenhancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 13. Batching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 13.1 Batchinginsertstatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 13.2 Batchingupdatestatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 13.3 Batchingdeletestatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 14. Fetching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 14.1 DTOprojection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 14.1.1 DTOprojectionpagination . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 14.1.2 NativequeryDTOprojection. . . . . . . . . . . . . . . . . . . . . . . . . . . 275 14.2 Queryfetchsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 14.3 Fetchingentities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 14.3.1 Directfetching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 14.3.1.1 FetchingaProxyreference . . . . . . . . . . . . . . . . . . . . . . 286 14.3.1.2 Naturalidentifierfetching . . . . . . . . . . . . . . . . . . . . . . 287 14.3.2 Queryfetching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 14.3.3 Fetchingassociations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 14.3.3.1 FetchType.EAGER. . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 14.3.3.2 FetchType.LAZY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 14.3.3.2.1 TheN+1queryproblem . . . . . . . . . . . . . . . . . . . . . . . 298 14.3.3.2.2 HowtocatchN+1queryproblemsduringtesting . . . . . . 300 14.3.3.2.3 LazyInitializationException . . . . . . . . . . . . . . . . . . . . 303 14.3.3.2.4 TheOpenSessioninViewAnti-Pattern . . . . . . . . . . . . 304 14.3.3.2.5 TemporarySessionLazyLoadingAnti-Pattern . . . . . . . 307 14.3.3.3 Associationsandpagination . . . . . . . . . . . . . . . . . . . . . 308 14.3.4 Attributelazyfetching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 CONTENTS 14.3.5 Fetchingsubentities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 14.4 Entityreferencededuplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 14.5 Queryplancache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 15. Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 15.1 Cachingflavors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 15.2 Cachesynchronizationstrategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 15.2.1 Cache-aside . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 15.2.2 Read-through . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 15.2.3 Write-invalidate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 15.2.4 Write-through . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 15.2.5 Write-behind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 15.3 Databasecaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 15.4 Application-levelcaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 15.4.1 Entityaggregates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 15.4.2 Distributedkey-valuestores . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 15.4.3 Cachesynchronizationpatterns. . . . . . . . . . . . . . . . . . . . . . . . . 331 15.4.4 Synchronousupdates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 15.4.5 Asynchronousupdates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 15.4.5.1 Changedatacapture . . . . . . . . . . . . . . . . . . . . . . . . . . 332 15.5 Second-levelcaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 15.5.1 Enablingthesecond-levelcache . . . . . . . . . . . . . . . . . . . . . . . . 335 15.5.2 Entitycacheloadingflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 15.5.3 Entitycacheentry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 15.5.3.1 Entityreferencecachestore . . . . . . . . . . . . . . . . . . . . . 340 15.5.4 Collectioncacheentry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 15.5.5 Querycacheentry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 15.5.6 Cacheconcurrencystrategies . . . . . . . . . . . . . . . . . . . . . . . . . . 345 15.5.6.1 READ_ONLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 15.5.6.1.1 InsertingREAD_ONLYcacheentries . . . . . . . . . . . . . . 346 15.5.6.1.2 UpdatingREAD_ONLYcacheentries . . . . . . . . . . . . . . 349 15.5.6.1.3 DeletingREAD_ONLYcacheentries . . . . . . . . . . . . . . 350 15.5.6.2 NONSTRICT_READ_WRITE . . . . . . . . . . . . . . . . . . . . . 352 15.5.6.2.1 InsertingNONSTRICT_READ_WRITEcacheentries . . . . 352 15.5.6.2.2 UpdatingNONSTRICT_READ_WRITEcacheentries. . . . 354 15.5.6.2.3 Riskofinconsistencies . . . . . . . . . . . . . . . . . . . . . . . 354 15.5.6.2.4 DeletingNONSTRICT_READ_WRITEcacheentries . . . . 356 15.5.6.3 READ_WRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 15.5.6.3.1 InsertingREAD_WRITEcacheentries . . . . . . . . . . . . . 357 15.5.6.3.2 UpdatingREAD_WRITEcacheentries . . . . . . . . . . . . . 359 15.5.6.3.3 DeletingREAD_WRITEcacheentries . . . . . . . . . . . . . 362 15.5.6.3.4 Softlockingconcurrencycontrol . . . . . . . . . . . . . . . . 363 15.5.6.4 TRANSACTIONAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 15.5.6.4.1 XA_Strictmode . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 15.5.6.4.2 XAmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 15.5.6.4.3 InsertingTRANSACTIONALcacheentries. . . . . . . . . . . 367

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.