Adds a JUnit test suite (GetVsGetReferenceTest, MergeRefreshTest, OptimisticLockTest, IdentityBatchTest, SequenceBatchTest, AllocationSizeSweepTest, BatchSizeSweepTest) so every surprising behavior described in the three companion posts has a reproducible test, alongside the original CommandLineRunner scenarios. Rewrites all three doc chapters and the README around the new experiments: the get()/getReference() same-session matrix, the merge()/refresh() experiments (including exactly when OptimisticLockException surfaces and a corrected LAZY-plus- cascade merge() result), and two new sweeps (allocationSize, batch_size) for batch inserts.
83 lines
5.2 KiB
Plaintext
83 lines
5.2 KiB
Plaintext
Hibernate: select next value for book_seq
|
|
Hibernate: /* insert for com.ankurm.hibernatedemo.model.Book */insert into book (author,status,title,version,id) values (?,?,?,?,?)
|
|
binding parameter (1:VARCHAR) <- [Test Author]
|
|
binding parameter (2:VARCHAR) <- [USER_EDIT]
|
|
binding parameter (3:VARCHAR) <- [Silent Overwrite]
|
|
binding parameter (4:BIGINT) <- [0]
|
|
binding parameter (5:BIGINT) <- [1]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version from book b1_0 where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [1]
|
|
Hibernate: /* update for com.ankurm.hibernatedemo.model.Book */update book set author=?,status=?,title=?,version=? where id=? and version=?
|
|
binding parameter (1:VARCHAR) <- [Test Author]
|
|
binding parameter (2:VARCHAR) <- [ADMIN_EDIT]
|
|
binding parameter (3:VARCHAR) <- [Silent Overwrite]
|
|
binding parameter (4:BIGINT) <- [1]
|
|
binding parameter (5:BIGINT) <- [1]
|
|
binding parameter (6:BIGINT) <- [0]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version from book b1_0 where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [1]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version from book b1_0 where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [1]
|
|
Hibernate: select next value for book_seq
|
|
Hibernate: /* insert for com.ankurm.hibernatedemo.model.Book */insert into book (author,status,title,version,id) values (?,?,?,?,?)
|
|
binding parameter (1:VARCHAR) <- [Test Author]
|
|
binding parameter (2:VARCHAR) <- [null]
|
|
binding parameter (3:VARCHAR) <- [Lazy Collection Book]
|
|
binding parameter (4:BIGINT) <- [0]
|
|
binding parameter (5:BIGINT) <- [2]
|
|
Hibernate: /* insert for com.ankurm.hibernatedemo.model.Note */insert into note (book_id,text,id) values (?,?,default)
|
|
binding parameter (1:BIGINT) <- [2]
|
|
binding parameter (2:VARCHAR) <- [first note]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version from book b1_0 where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [2]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version,n1_0.book_id,n1_0.id,n1_0.text from book b1_0 left join note n1_0 on b1_0.id=n1_0.book_id where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [2]
|
|
Hibernate: /* update for com.ankurm.hibernatedemo.model.Book */update book set author=?,status=?,title=?,version=? where id=? and version=?
|
|
binding parameter (1:VARCHAR) <- [Edited While Detached]
|
|
binding parameter (2:VARCHAR) <- [null]
|
|
binding parameter (3:VARCHAR) <- [Lazy Collection Book]
|
|
binding parameter (4:BIGINT) <- [1]
|
|
binding parameter (5:BIGINT) <- [2]
|
|
binding parameter (6:BIGINT) <- [0]
|
|
merge() initialized the LAZY notes collection because CascadeType.MERGE forces traversal of it
|
|
Hibernate: /* insert for com.ankurm.hibernatedemo.model.Book */insert into book (author,status,title,version,id) values (?,?,?,?,?)
|
|
binding parameter (1:VARCHAR) <- [Test Author]
|
|
binding parameter (2:VARCHAR) <- [DRAFT]
|
|
binding parameter (3:VARCHAR) <- [Managed + Detached]
|
|
binding parameter (4:BIGINT) <- [0]
|
|
binding parameter (5:BIGINT) <- [3]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version from book b1_0 where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [3]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version from book b1_0 where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [3]
|
|
Hibernate: /* update for com.ankurm.hibernatedemo.model.Book */update book set author=?,status=?,title=?,version=? where id=? and version=?
|
|
binding parameter (1:VARCHAR) <- [Changed On The Detached Copy]
|
|
binding parameter (2:VARCHAR) <- [DRAFT]
|
|
binding parameter (3:VARCHAR) <- [Managed + Detached]
|
|
binding parameter (4:BIGINT) <- [1]
|
|
binding parameter (5:BIGINT) <- [3]
|
|
binding parameter (6:BIGINT) <- [0]
|
|
Hibernate: /* insert for com.ankurm.hibernatedemo.model.Book */insert into book (author,status,title,version,id) values (?,?,?,?,?)
|
|
binding parameter (1:VARCHAR) <- [Robert C. Martin]
|
|
binding parameter (2:VARCHAR) <- [null]
|
|
binding parameter (3:VARCHAR) <- [Clean Code]
|
|
binding parameter (4:BIGINT) <- [0]
|
|
binding parameter (5:BIGINT) <- [4]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version from book b1_0 where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [4]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version from book b1_0 where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [4]
|
|
Hibernate: /* update for com.ankurm.hibernatedemo.model.Book */update book set author=?,status=?,title=?,version=? where id=? and version=?
|
|
binding parameter (1:VARCHAR) <- [Robert C. Martin]
|
|
binding parameter (2:VARCHAR) <- [null]
|
|
binding parameter (3:VARCHAR) <- [Clean Code (2nd Edition)]
|
|
binding parameter (4:BIGINT) <- [1]
|
|
binding parameter (5:BIGINT) <- [4]
|
|
binding parameter (6:BIGINT) <- [0]
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version,n1_0.book_id,n1_0.id,n1_0.text from book b1_0 left join note n1_0 on b1_0.id=n1_0.book_id where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [4]
|
|
OptimisticLockException surfaced directly from the merge() call.
|
|
exception: jakarta.persistence.OptimisticLockException: Row was already updated or deleted by another transaction for entity [com.ankurm.hibernatedemo.model.Book with id '4']
|
|
Hibernate: select b1_0.id,b1_0.author,b1_0.status,b1_0.title,b1_0.version from book b1_0 where b1_0.id=?
|
|
binding parameter (1:BIGINT) <- [4]
|