66 */
77package org .hibernate .id ;
88
9- import java .sql .Connection ;
10- import java .sql .PreparedStatement ;
11- import java .sql .ResultSet ;
12- import java .sql .SQLException ;
13- import java .util .Collections ;
149import java .util .Properties ;
1510
1611import org .hibernate .Session ;
12+ import org .hibernate .Transaction ;
1713import org .hibernate .boot .Metadata ;
1814import org .hibernate .boot .MetadataSources ;
19- import org .hibernate .boot .model .naming .Identifier ;
2015import org .hibernate .boot .model .naming .ObjectNameNormalizer ;
21- import org .hibernate .boot .model .relational .SimpleAuxiliaryDatabaseObject ;
2216import org .hibernate .boot .registry .StandardServiceRegistry ;
2317import org .hibernate .boot .registry .StandardServiceRegistryBuilder ;
2418import org .hibernate .boot .spi .MetadataBuildingContext ;
2519import org .hibernate .cfg .AvailableSettings ;
26- import org .hibernate .engine .jdbc .env .spi .JdbcEnvironment ;
27- import org .hibernate .engine .jdbc .spi .JdbcServices ;
2820import org .hibernate .engine .spi .SessionFactoryImplementor ;
2921import org .hibernate .engine .spi .SessionImplementor ;
3022import org .hibernate .id .enhanced .SequenceStyleGenerator ;
3123import org .hibernate .internal .SessionImpl ;
32- import org .hibernate .jdbc .Work ;
3324import org .hibernate .type .StandardBasicTypes ;
3425
35- import org .hibernate .testing .DialectChecks ;
36- import org .hibernate .testing .RequiresDialectFeature ;
37- import org .hibernate .testing .env .TestingDatabaseInfo ;
38- import org .hibernate .testing .junit4 .BaseUnitTestCase ;
39- import org .hibernate .testing .boot .BasicTestingJdbcServiceImpl ;
40- import org .hibernate .testing .boot .MetadataBuildingContextTestingImpl ;
4126import org .junit .After ;
4227import org .junit .Before ;
4328import org .junit .Test ;
4429
30+ import org .hibernate .testing .DialectChecks ;
31+ import org .hibernate .testing .RequiresDialectFeature ;
32+ import org .hibernate .testing .boot .MetadataBuildingContextTestingImpl ;
33+ import org .hibernate .testing .junit4 .BaseUnitTestCase ;
34+
4535import static org .junit .Assert .assertEquals ;
4636
4737/**
5040 *
5141 * @author Steve Ebersole
5242 */
53- @ SuppressWarnings ({ "deprecation" })
54- @ RequiresDialectFeature ( DialectChecks .SupportsSequences .class )
43+ @ SuppressWarnings ({"deprecation" })
44+ @ RequiresDialectFeature (DialectChecks .SupportsSequences .class )
5545public class SequenceHiLoGeneratorNoIncrementTest extends BaseUnitTestCase {
5646 private static final String TEST_SEQUENCE = "test_sequence" ;
5747
5848 private StandardServiceRegistry serviceRegistry ;
5949 private SessionFactoryImplementor sessionFactory ;
6050 private SequenceStyleGenerator generator ;
61- private SessionImplementor session ;
51+ private SessionImplementor sessionImpl ;
52+ private SequenceValueExtractor sequenceValueExtractor ;
6253
6354 @ Before
6455 public void setUp () throws Exception {
65- BasicTestingJdbcServiceImpl jdbcServices = new BasicTestingJdbcServiceImpl ();
66- jdbcServices .prepare ( false );
67-
6856 serviceRegistry = new StandardServiceRegistryBuilder ()
6957 .enableAutoClose ()
70- .addService ( JdbcEnvironment .class , jdbcServices .getJdbcEnvironment () )
71- .addService ( JdbcServices .class , jdbcServices )
7258 .applySetting ( AvailableSettings .HBM2DDL_AUTO , "create-drop" )
7359 .build ();
7460
@@ -94,13 +80,14 @@ protected MetadataBuildingContext getBuildingContext() {
9480 generator .registerExportables ( metadata .getDatabase () );
9581
9682 sessionFactory = (SessionFactoryImplementor ) metadata .buildSessionFactory ();
83+ sequenceValueExtractor = new SequenceValueExtractor ( sessionFactory .getDialect (), TEST_SEQUENCE );
9784 }
9885
9986 @ After
10087 public void tearDown () throws Exception {
101- if ( session != null && !session .isClosed ()) {
102- ((Session )session ).close ();
103- }
88+ if ( sessionImpl != null && !sessionImpl .isClosed () ) {
89+ ((Session ) sessionImpl ).close ();
90+ }
10491 if ( sessionFactory != null ) {
10592 sessionFactory .close ();
10693 }
@@ -111,58 +98,49 @@ public void tearDown() throws Exception {
11198
11299 @ Test
113100 public void testHiLoAlgorithm () {
114- session = (SessionImpl ) sessionFactory .openSession ();
115- ((Session )session ).beginTransaction ();
101+ sessionImpl = (SessionImpl ) sessionFactory .openSession ();
116102
117103 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
118104 // initially sequence should be uninitialized
119- assertEquals ( 0L , extractSequenceValue ( (session ) ) );
105+ assertEquals ( 0L , extractSequenceValue ( (sessionImpl ) ) );
106+
120107
121108 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
122109 // historically the hilo generators skipped the initial block of values;
123110 // so the first generated id value is maxlo + 1, here be 4
124- Long generatedValue = ( Long ) generator . generate ( session , null );
125- assertEquals ( 1L , generatedValue . longValue () );
111+ assertEquals ( 1L , generateValue () );
112+
126113 // which should also perform the first read on the sequence which should set it to its "start with" value (1)
127- assertEquals ( 1L , extractSequenceValue ( (session ) ) );
114+ assertEquals ( 1L , extractSequenceValue ( (sessionImpl ) ) );
128115
129116 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
130- generatedValue = (Long ) generator .generate ( session , null );
131- assertEquals ( 2L , generatedValue .longValue () );
132- assertEquals ( 2L , extractSequenceValue ( (session ) ) );
117+ assertEquals ( 2L , generateValue () );
118+ assertEquals ( 2L , extractSequenceValue ( (sessionImpl ) ) );
133119
134120 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
135- generatedValue = (Long ) generator .generate ( session , null );
136- assertEquals ( 3L , generatedValue .longValue () );
137- assertEquals ( 3L , extractSequenceValue ( (session ) ) );
121+ assertEquals ( 3L , generateValue () );
122+ assertEquals ( 3L , extractSequenceValue ( (sessionImpl ) ) );
138123
139124 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
140- generatedValue = (Long ) generator .generate ( session , null );
141- assertEquals ( 4L , generatedValue .longValue () );
142- assertEquals ( 4L , extractSequenceValue ( (session ) ) );
125+ assertEquals ( 4L , generateValue () );
126+ assertEquals ( 4L , extractSequenceValue ( (sessionImpl ) ) );
143127
144128 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
145- generatedValue = (Long ) generator .generate ( session , null );
146- assertEquals ( 5L , generatedValue .longValue () );
147- assertEquals ( 5L , extractSequenceValue ( (session ) ) );
129+ assertEquals ( 5L , generateValue () );
130+ assertEquals ( 5L , extractSequenceValue ( (sessionImpl ) ) );
148131
149- ((Session )session ).getTransaction ().commit ();
150- ((Session )session ).close ();
132+ ((Session ) sessionImpl ).close ();
151133 }
152134
153- private long extractSequenceValue (final SessionImplementor session ) {
154- class WorkImpl implements Work {
155- private long value ;
156- public void execute (Connection connection ) throws SQLException {
157-
158- PreparedStatement query = session .getJdbcCoordinator ().getStatementPreparer ().prepareStatement ( "select currval('" + TEST_SEQUENCE + "');" );
159- ResultSet resultSet = session .getJdbcCoordinator ().getResultSetReturn ().extract ( query );
160- resultSet .next ();
161- value = resultSet .getLong ( 1 );
162- }
163- }
164- WorkImpl work = new WorkImpl ();
165- ( (Session ) session ).doWork ( work );
166- return work .value ;
135+ private long extractSequenceValue (SessionImplementor sessionImpl ) {
136+ return sequenceValueExtractor .extractSequenceValue ( sessionImpl );
137+ }
138+
139+ private long generateValue () {
140+ Long generatedValue ;
141+ Transaction transaction = ((Session ) sessionImpl ).beginTransaction ();
142+ generatedValue = (Long ) generator .generate ( sessionImpl , null );
143+ transaction .commit ();
144+ return generatedValue .longValue ();
167145 }
168146}
0 commit comments