44 */
55package org .hibernate .orm .test .annotations .lob .locator ;
66
7- import java .sql .SQLException ;
8-
9- import org .junit .Assert ;
10- import org .junit .Test ;
11-
12- import org .hibernate .Session ;
13- import org .hibernate .testing .DialectChecks ;
14- import org .hibernate .testing .RequiresDialectFeature ;
7+ import org .hibernate .testing .orm .junit .DialectFeatureChecks ;
8+ import org .hibernate .testing .orm .junit .DomainModel ;
159import org .hibernate .testing .orm .junit .JiraKey ;
16- import org .hibernate .testing .junit4 .BaseCoreFunctionalTestCase ;
10+ import org .hibernate .testing .orm .junit .RequiresDialectFeature ;
11+ import org .hibernate .testing .orm .junit .SessionFactory ;
12+ import org .hibernate .testing .orm .junit .SessionFactoryScope ;
1713import org .hibernate .type .descriptor .java .DataHelper ;
14+ import org .junit .jupiter .api .Test ;
1815
16+ import static org .assertj .core .api .Assertions .assertThat ;
17+ import static org .assertj .core .api .BDDAssertions .fail ;
1918import static org .hibernate .Hibernate .getLobHelper ;
2019
2120/**
2221 * @author Lukasz Antoniak
2322 */
24- public class LobLocatorTest extends BaseCoreFunctionalTestCase {
25- @ Override
26- protected Class <?>[] getAnnotatedClasses () {
27- return new Class <?>[] { LobHolder .class };
28- }
23+ @ DomainModel (
24+ annotatedClasses = {
25+ LobHolder .class
26+ }
27+ )
28+ @ SessionFactory
29+ public class LobLocatorTest {
2930
3031 /**
3132 * Specific JDBC drivers (e.g. SQL Server) may not automatically rewind bound input stream
@@ -34,47 +35,56 @@ protected Class<?>[] getAnnotatedClasses() {
3435 */
3536 @ Test
3637 @ JiraKey (value = "HHH-8193" )
37- @ RequiresDialectFeature (DialectChecks .UsesInputStreamToInsertBlob .class )
38- public void testStreamResetBeforeParameterBinding () throws SQLException {
39- final Session session = openSession ();
38+ @ RequiresDialectFeature (feature = DialectFeatureChecks .UsesInputStreamToInsertBlob .class )
39+ public void testStreamResetBeforeParameterBinding (SessionFactoryScope scope ) {
4040
41- session .getTransaction ().begin ();
42- LobHolder entity = new LobHolder (
43- getLobHelper ().createBlob ( "blob" .getBytes () ),
44- getLobHelper ().createClob ( "clob" ), 0
45- );
46- session .persist ( entity );
47- session .getTransaction ().commit ();
48-
49- final Integer updatesLimit = 3 ;
41+ scope .inTransaction (
42+ session -> {
43+ LobHolder entity = new LobHolder (
44+ getLobHelper ().createBlob ( "blob" .getBytes () ),
45+ getLobHelper ().createClob ( "clob" ), 0
46+ );
47+ session .persist ( entity );
48+ session .getTransaction ().commit ();
5049
51- for ( int i = 1 ; i <= updatesLimit ; ++i ) {
52- session .getTransaction ().begin ();
53- entity = (LobHolder ) session .get ( LobHolder .class , entity .getId () );
54- entity .setCounter ( i );
55- entity = (LobHolder ) session .merge ( entity );
56- session .getTransaction ().commit ();
57- }
50+ final int updatesLimit = 3 ;
5851
59- session .getTransaction ().begin ();
60- entity = (LobHolder ) session .get ( LobHolder .class , entity .getId () );
61- entity .setBlobLocator ( getLobHelper ().createBlob ( "updated blob" .getBytes () ) );
62- entity .setClobLocator ( getLobHelper ().createClob ( "updated clob" ) );
63- entity = (LobHolder ) session .merge ( entity );
64- session .getTransaction ().commit ();
52+ for ( int i = 1 ; i <= updatesLimit ; ++i ) {
53+ session .getTransaction ().begin ();
54+ entity = session .find ( LobHolder .class , entity .getId () );
55+ entity .setCounter ( i );
56+ entity = session .merge ( entity );
57+ session .getTransaction ().commit ();
58+ }
6559
66- session .clear ();
60+ session .getTransaction ().begin ();
61+ entity = session .find ( LobHolder .class , entity .getId () );
62+ entity .setBlobLocator ( getLobHelper ().createBlob ( "updated blob" .getBytes () ) );
63+ entity .setClobLocator ( getLobHelper ().createClob ( "updated clob" ) );
64+ entity = session .merge ( entity );
65+ session .getTransaction ().commit ();
6766
68- session .getTransaction ().begin ();
69- checkState ( "updated blob" .getBytes (), "updated clob" , updatesLimit , (LobHolder ) session .get ( LobHolder .class , entity .getId () ) );
70- session .getTransaction ().commit ();
67+ session .clear ();
7168
72- session .close ();
69+ session .getTransaction ().begin ();
70+ try {
71+ checkState (
72+ "updated blob" .getBytes (),
73+ "updated clob" ,
74+ updatesLimit ,
75+ session .find ( LobHolder .class , entity .getId () )
76+ );
77+ }
78+ catch (Exception e ) {
79+ fail ( e );
80+ }
81+ }
82+ );
7383 }
7484
75- private void checkState (byte [] blob , String clob , Integer counter , LobHolder entity ) throws SQLException {
76- Assert . assertEquals ( counter , entity .getCounter () );
77- Assert . assertArrayEquals ( blob , DataHelper .extractBytes ( entity .getBlobLocator ().getBinaryStream () ) );
78- Assert . assertEquals ( clob , DataHelper .extractString ( entity .getClobLocator () ) );
85+ private void checkState (byte [] blob , String clob , Integer counter , LobHolder entity ) throws Exception {
86+ assertThat ( entity .getCounter () ). isEqualTo ( counter );
87+ assertThat ( DataHelper .extractBytes ( entity .getBlobLocator ().getBinaryStream () ) ). isEqualTo ( blob );
88+ assertThat ( DataHelper .extractString ( entity .getClobLocator () ) ). isEqualTo ( clob );
7989 }
8090}
0 commit comments