0% found this document useful (0 votes)
102 views17 pages

How Does Hibernate Read - Write Cacheconcurrenc Ystrategy Work

The READ_WRITE cache concurrency strategy in Hibernate works as follows: 1. Newly created entities are cached after the database transaction commits using a write lock to prevent stale data. 2. Updated entities are synchronized between the database and cache by invalidating the old cache entry and writing a new one using a write lock. 3. The cache is populated asynchronously after transactions to prevent data integrity issues from stale cache entries using locking mechanisms.

Uploaded by

kumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
102 views17 pages

How Does Hibernate Read - Write Cacheconcurrenc Ystrategy Work

The READ_WRITE cache concurrency strategy in Hibernate works as follows: 1. Newly created entities are cached after the database transaction commits using a write lock to prevent stale data. 2. Updated entities are synchronized between the database and cache by invalidating the old cache entry and writing a new one using a write lock. 3. The cache is populated asynchronously after transactions to prevent data integrity issues from stale cache entries using locking mechanisms.

Uploaded by

kumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

Vlad Mihalcea

HOME BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS

How does Let’s


connect

Hibernate
READ_WRITE
CacheConcurrenc
yStrategy work
Find
Last modified: Jan 22, 2019 Article

Follow @vlad_mihalcea

Search …Go

Imagine having a tool that can automatically detect if


you are using JPA and Hibernate properly.
Hypersistence Optimizer is that tool!
Book

Introduction
In my previous post, I introduced the
NONSTRICT_READ_WRITE second-level cache
concurrency mechanism. In this article, I am going to
continue this topic with the READ_WRITE strategy.
Video
Course

Write-through caching
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 1/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

NONSTRICT_READ_WRITE
Vlad Mihalcea is a read-through caching
strategy and updates end-up invalidating cache entries. As
simple as this strategy may be, the performance drops
HOME BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS
with the increase of write operations. A write-through
cache strategy is better choice for write-intensive
applications, since cache entries can be updated rather
than being discarded.

Hypersistence
Because the database is the system of record and Optimizer
database operations are wrapped inside physical
transactions the cache can either be updated
synchronously (like it’s the case of the TRANSACTIONAL
cache concurrency strategy) or asynchronously (right after
the database transaction is committed).

The READ_WRITE strategy is an asynchronous cache


concurrency mechanism and to prevent data integrity
ERP
issues (e.g. stale cache entries), it uses a locking Contact

mechanism that provides unit-of-work isolation


guarantees.

Inserting data
Because persisted entities are uniquely identified (each
entity being assigned to a distinct database row), the
newly created entities get cached right after the database
transaction is committed:

1 @Override Online
2 public boolean afterInsert( Workshop
3 Object key, Object value, Object vers
4 throws CacheException {
5 region().writeLock( key );
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
6 try {
To find out
7 more, including how to control
final cookies, see
Lockable here: Our
item = Cookie Policy Close and accept
8 (Lockable) region().get( key
9 if ( item == null ) {
10 region().put( key,
11 new Item( value, version,
https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 2/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

12 region().nextTimestam Consulting
Vlad13Mihalcea
14 );
)

15 return true;
16 }
HOME 17 BLOG STORE
else { TRAINING CONSULTING TUTORIALS VIDEOS TALKS
18 return false;
19 }
20 }
21 finally {
22 region().writeUnlock( key );
23 }
24 }

For an entity to be cached upon insertion, it must use a Limited


SEQUENCE generator, the cache being populated by the time offer:
Get 10 free
EntityInsertAction: Adobe
Stock
1 @Override images.
2 public void doAfterTransactionCompletion(
3 SessionImplementor session) ADS VIA CARBO
4 throws HibernateException {
5
6 final EntityPersister persister = get
7 if ( success && isCachePutEnabled( pe
8 getSession() ) ) {
9 final CacheKey ck = getSessio
10 .generateCacheKey(
11 getId(),
12 persister.getIdentifi
13 persister.getRootEnti Em
14
15 final boolean put = cacheAfte
16 persister, ck ); Get
17 }
18 } it
19 postCommitInsert( success );
20 } Now

The IDENTITY generator doesn’t play well with the


transactional write-behind first-level cache design, so the
associated EntityIdentityInsertAction doesn’t cache newly
inserted entries (at least until HHH-7964 is fixed).
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept
Theoretically, between the database transaction commit
and the second-level cache insert, one concurrent

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 3/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

transaction might load the newly created entity, therefore


Vlad Mihalcea
triggering a cache insert. Although possible, the cache
synchronization lag is very short and if a concurrent
HOME BLOG is
transaction STORE
interleaved, TRAINING
it only makes the CONSULTING
other TUTORIALS VIDEOS TALKS

transaction hit the database instead of loading the entity


from the cache.

Updating data
While inserting entities is a rather simple operation, for
updates, we need to synchronize both the database and
the cache entry. The READ_WRITE concurrency strategy
employs a locking mechanism to ensure data integrity:

Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out
1. more, including howTransaction
The Hibernate to control cookies, see here:
commit Our Cookie Policy
procedure Close and accept

triggers a Session flush

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 4/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

2. The EntityUpdateAction replaces the current cache


Vlad entry
Mihalcea
with a Lock object

3. The update method is used for synchronous cache


HOME BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS
updates so it doesn’t do anything when using an
asynchronous cache concurrency strategy, like
READ_WRITE

4. After the database transaction is committed, the


after-transaction-completion callbacks are called

5. The EntityUpdateAction calls the afterUpdate


method of the EntityRegionAccessStrategy

6. The ReadWriteEhcacheEntityRegionAccessStrategy
replaces the Lock entry with an actual Item,
encapsulating the entity dissembled state

Deleting data
Deleting entities is similar to the update process, as we
can see from the following sequence diagram:

Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 5/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

Vlad Mihalcea

HOME BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS

The Hibernate Transaction commit procedure triggers a


Session flush
The EntityDeleteAction replaces the current cache
entry with a Lock object
The remove method call doesn’t do anything, since
READ_WRITE is an asynchronous cache concurrency
strategy
After the database transaction is committed, the after-
transaction-completion callbacks are called
The EntityDeleteAction calls the unlockItem method of
the EntityRegionAccessStrategy
The ReadWriteEhcacheEntityRegionAccessStrategy
replaces the Lock entry with another Lock object whose
timeout period is increased

After
Privacy an entity
& Cookies: Thisissite
deleted, its associated
uses cookies. By continuingsecond-level
to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Our that’s
Cookie Policy Close and accept
cache entry will be replaced by a Lock object,
making any subsequent request to read from the database
instead of using the cache entry.
https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 6/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

Vlad Mihalcea
Locking constructs
HOME BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS

Both the Item and the Lock classes inherit from the
Lockable type and each of these two has a specific policy
for allowing a cache entry to be read or written.

The READ_WRITE Lock


object
The Lock class defines the following methods:

1 @Override
2 public boolean isReadable(long txTimestam
3 return false;
4 }
5
6 @Override
7 public boolean isWriteable(long txTimesta
8 Object newVersion, Comparator version
9 if ( txTimestamp > timeout ) {
10 // if timedout then allow write
11 return true;
12 }
13 if ( multiplicity > 0 ) {
14 // if still locked then disallow
15 return false;
16 }
17 return version == null
18 ? txTimestamp > unlockTimestamp
19 : versionComparator.compare( vers
20 newVersion ) < 0;
21 }

A Lock object doesn’t allow reading the cache entry,


so any subsequent request must go to the database

If the current Session creation timestamp is greater


Privacy than the This
& Cookies: Lock timeout
site threshold,
uses cookies. the cache
By continuing entry
to use this is you agree to their use.
website,
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept
allowed to be written

If at least one Session has managed to lock this


entry, any write operation is forbidden
https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 7/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

A Lock entry allows writing if the incoming entity


Vlad state
Mihalcea
has incremented its version or the current
Session creation timestamp is greater than the current
HOME BLOG
entry STORE
unlocking timestampTRAINING CONSULTING TUTORIALS VIDEOS TALKS

The READ_WRITE Item


object
The Item class defines the following read/write access
policy:

1 @Override
2 public boolean isReadable(long txTimestam
3 return txTimestamp > timestamp;
4 }
5
6 @Override
7 public boolean isWriteable(long txTimesta
8 Object newVersion, Comparator version
9 return version != null && versionComp
10 .compare( version, newVersion ) <
11 }

An Item is readable only from a Session that’s been


started after the cache entry creation time

A Item entry allows writing only if the incoming entity


state has incremented its version

Cache entry concurrency


control
These concurrency control mechanism are invoked when
saving and reading the underlying cache entries.

Privacy
The&cache
Cookies:entry
This site
is uses
readcookies.
whenBy continuing to use this website, you agree to their use.
the
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept
ReadWriteEhcacheEntityRegionAccessStrategy get
method is called:

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 8/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

1 public final Object get(Object key, long


2
Vlad Mihalceathrows CacheException {
3 readLockIfNeeded( key );
4 try {
5 final Lockable item =
HOME 6 BLOG STORE (Lockable)
TRAININGregion().get(
CONSULTING
key TUTORIALS VIDEOS TALKS
7
8 final boolean readable =
9 item != null &&
10 item.isReadable( txTimestamp
11
12 if ( readable ) {
13 return item.getValue();
14 }
15 else {
16 return null;
17 }
18 }
19 finally {
20 readUnlockIfNeeded( key );
21 }
22 }

The cache entry is written by the


ReadWriteEhcacheEntityRegionAccessStrategy
putFromLoad method:

1 public final boolean putFromLoad(


2 Object key,
3 Object value,
4 long txTimestamp,
5 Object version,
6 boolean minimalPutOverride)
7 throws CacheException {
8 region().writeLock( key );
9 try {
10 final Lockable item =
11 (Lockable) region().get( key
12
13 final boolean writeable =
14 item == null ||
15 item.isWriteable(
16 txTimestamp,
17 version,
18 versionComparator );
19
20 if ( writeable ) {
Privacy21
& Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
region().put(
To find22
out more, including how to control key,
cookies, see here: Our Cookie Policy Close and accept
23 new Item(
24 value,
25 version,
26 region().nextTimestam
https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 9/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

27 )
Vlad28Mihalcea
29
);
return true;
30 }
31 else {
HOME 32 BLOG STORE return
TRAINING
false; CONSULTING TUTORIALS VIDEOS TALKS
33 }
34 }
35 finally {
36 region().writeUnlock( key );
37 }
38 }

Timing out
If the database operation fails, the current cache entry
holds a Lock object and it cannot rollback to its previous
Item state. For this reason, the Lock must timeout to allow
the cache entry to be replaced by an actual Item object.
The EhcacheDataRegion defines the following timeout
property:

1 private static final String CACHE_LOCK_TIM


2 "net.sf.ehcache.hibernate.cache_lock_t
3 private static final int DEFAULT_CACHE_LOC

Unless we override the


net.sf.ehcache.hibernate.cache_lock_timeout property, the
default timeout is 60 seconds:

1 final String timeout = properties.getPrope


2 CACHE_LOCK_TIMEOUT_PROPERTY,
3 Integer.toString( DEFAULT_CACHE_LOCK_T
4 );

The following test will emulate a failing database


Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
transaction, so we can observe how the READ_WRITE
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept
cache only allows writing after the timeout threshold

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 10/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

expires. First, we are going to lower the timeout value, to


Vlad Mihalcea
reduce the cache freezing period:

HOME 1 properties.put(
BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS
2 "net.sf.ehcache.hibernate.cache_lock_t
3 String.valueOf(250));

We’ll use a custom interceptor to manually rollback the


currently running transaction:

1 @Override
2 protected Interceptor interceptor() {
3 return new EmptyInterceptor() {
4 @Override
5 public void beforeTransactionComp
6 Transaction tx) {
7 if(applyInterceptor.get()) {
8 tx.rollback();
9 }
10 }
11 };
12 }

The following routine will test the lock timeout behavior:

1 try {
2 doInTransaction(session -> {
3 Repository repository = (Reposito
4 session.get(Repository.class,
5 repository.setName("High-Performa
6 applyInterceptor.set(true);
7 });
8 } catch (Exception e) {
9 LOGGER.info("Expected", e);
10 }
11 applyInterceptor.set(false);
12
13 AtomicReference<Object> previousCacheEntr
14 new AtomicReference<>();
15 AtomicBoolean cacheEntryChanged = new Ato
16
17 while (!cacheEntryChanged.get()) {
18 doInTransaction(session
Privacy & Cookies: This ->this{ website, you agree to their use.
site uses cookies. By continuing to use
To find19 boolean
out more, including how to control entryChange;
cookies, see here: Our Cookie Policy Close and accept
20 session.get(Repository.class, 1L)
21
22 try {
23 Object previousCacheEntry =
https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 11/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

24 previousCacheEntryReferen
Vlad25Mihalcea
26
Object cacheEntry =
getCacheEntry(Repository.
27
28 entryChange = previousCacheEn
HOME 29 BLOG STORE TRAINING CONSULTING
previousCacheEntry != cac TUTORIALS VIDEOS TALKS
30 previousCacheEntryReference.s
31 LOGGER.info("Cache entry {}",
32 ToStringBuilder.reflectio
33 cacheEntry));
34
35 if(!entryChange) {
36 sleep(100);
37 } else {
38 cacheEntryChanged.set(tru
39 }
40 } catch (IllegalAccessException e
41 LOGGER.error("Error accessing
42 }
43 });
44 }

Running this test generates the following output:

1 select
2 readwritec0_.id as id1_0_0_,
3 readwritec0_.name as name2_0_0_,
4 readwritec0_.version as version3_0_0_
5 from
6 repository readwritec0_
7 where
8 readwritec0_.id=1
9
10 update
11 repository
12 set
13 name='High-Performance Hibernate',
14 version=1
15 where
16 id=1
17 and version=0
18
19 JdbcTransaction - rolled JDBC Connection
20
21 select
22 readwritec0_.id as id1_0_0_,
23 readwritec0_.name as name2_0_0_,
24 readwritec0_.version as version3_0_0_
Privacy25 from
& Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find26 repository
out more, including readwritec0_
how to control cookies, see here: Our Cookie Policy Close and accept
27 where
28 readwritec0_.id = 1
29
30 Cache entry net.sf.ehcache.Element@3f9a08
https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 12/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

31 key=ReadWriteCacheConcurrencyStrategy
Vlad32 Mihalcea
33
value=Lock Source-UUID:ac775350-3930-
version=1,
34 hitCount=3,
35 timeToLive=120,
HOME 36 BLOG STORE TRAINING
timeToIdle=120, CONSULTING TUTORIALS VIDEOS TALKS
37 lastUpdateTime=1432280657865,
38 cacheDefaultLifespan=true,id=0
39 ]
40 Wait 100 ms!
41 JdbcTransaction - committed JDBC Connecti
42
43 select
44 readwritec0_.id as id1_0_0_,
45 readwritec0_.name as name2_0_0_,
46 readwritec0_.version as version3_0_0_
47 from
48 repository readwritec0_
49 where
50 readwritec0_.id = 1
51
52 Cache entry net.sf.ehcache.Element@3f9a08
53 key=ReadWriteCacheConcurrencyStrategy
54 value=Lock Source-UUID:ac775350-3930-
55 version=1,
56 hitCount=3,
57 timeToLive=120,
58 timeToIdle=120,
59 lastUpdateTime=1432280657865,
60 cacheDefaultLifespan=true,
61 id=0
62 ]
63 Wait 100 ms!
64 JdbcTransaction - committed JDBC Connecti
65
66 select
67 readwritec0_.id as id1_0_0_,
68 readwritec0_.name as name2_0_0_,
69 readwritec0_.version as version3_0_0_
70 from
71 repository readwritec0_
72 where
73 readwritec0_.id = 1
74 Cache entry net.sf.ehcache.Element@305f03
75 key=ReadWriteCacheConcurrencyStrategy
76 value=org.hibernate.cache.ehcache.int
77 version=1,
78 hitCount=1,
79 timeToLive=120,
80 timeToIdle=120,
81 lastUpdateTime=1432280658322,
Privacy & Cookies: This site cacheDefaultLifespan=true,
82 uses cookies. By continuing to use this website, you agree to their use.
To find83 id=0
out more, including how to control cookies, see here: Our Cookie Policy Close and accept
84 ]
85 JdbcTransaction - committed JDBC Connecti

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 13/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

The first transaction tries to update an entity, so the


Vlad associated
Mihalcea second-level cache entry is locked prior to
committing the transaction.
HOME BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS
The first transaction fails and it gets rolled back

The lock is being held, so the next two successive


transactions are going to the database, without
replacing the Lock entry with the current loaded
database entity state

After the Lock timeout period expires, the third


transaction can finally replace the Lock with an Item
cache entry (holding the entity disassembled hydrated
state)

If you enjoyed this article, I bet you are going to love


my Book and Video Courses as well.

Conclusion
The READ_WRITE concurrency strategy offers the
benefits of a write-through caching mechanism, but you
need to understand it’s inner workings to decide if it’s good
fit for your current project data access requirements.

For heavy write contention scenarios, the locking


constructs will make other concurrent transactions hit the
database, so you must decide if a synchronous cache
concurrency strategy is better suited in this situation.
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept
Code available on GitHub.

Follow @vlad_mihalcea
https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 14/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

Vlad Mihalcea

HOME BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS

Enter your email address

DOWNLOAD NOW

Related

High-Performance How does High-Performance


Java Persistence – Hibernate Java Persistence -
Chapter 16 – NONSTRICT_RE… Part Two
Caching CacheConcurren… In "Hibernate"
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
In "Hibernate" work
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept
In "Hibernate"

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 15/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

Vlad Mihalcea
Category: Hibernate  Tags: caching, concurrency
control, hibernate, read-write, Training, Tutorial
HOME BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS

← How does Hibernate NONSTRICT_READ_WRITE


CacheConcurrencyStrategy work
How does Hibernate TRANSACTIONAL
CacheConcurrencyStrategy work →

Leave a Reply
Your email address will not be published. Required
fields are marked *

Comment

Before posting the comment, please take the


time to read the FAQ page

Name *

Email *

Website

Notify me of follow-up comments by email.


Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept
Post Comment

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 16/17
11/6/2020 How does Hibernate READ_WRITE CacheConcurrencyStrategy work - Vlad Mihalcea

This site uses Akismet to reduce spam. Learn how


Vlad your
Mihalcea
comment data is processed.

HOME BLOG STORE TRAINING CONSULTING TUTORIALS VIDEOS TALKS

Tu t o r i a l s Social About Meta


Media

Hibernate About Log in


Twitter
SQL FAQ Entries feed
Facebook
Comments feed
Spring Archive
YouTube
WordPress.org
Git Privacy Policy
GitHub
FlexyPool Terms of Service
LinkedIn

Vlad Mihalcea
Powered by WordPress.com.      

Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Our Cookie Policy Close and accept

https://vladmihalcea.com/how-does-hibernate-read_write-cacheconcurrencystrategy-work/ 17/17

You might also like