71
71
public class OracleStoredProcedureTest {
72
72
73
73
private Person person1 ;
74
+ private static final String CITY = "London" ;
75
+ private static final String STREET = "Lollard Street" ;
76
+ private static final String ZIP = "SE116UG" ;
74
77
75
78
@ Test
76
79
public void testUnRegisteredParameter (EntityManagerFactoryScope scope ) {
@@ -91,35 +94,120 @@ public void testUnRegisteredParameter(EntityManagerFactoryScope scope) {
91
94
} );
92
95
}
93
96
97
+ @ Test
98
+ public void testUnRegisteredParameterByName2 (EntityManagerFactoryScope scope ) {
99
+ scope .inTransaction ( (em ) -> {
100
+ final StoredProcedureQuery function = em .createStoredProcedureQuery ( "find_char" , Integer .class );
101
+ function .setHint ( QueryHints .CALLABLE_FUNCTION , "true" );
102
+ // search-string
103
+ function .registerStoredProcedureParameter ( "search_char" , String .class , ParameterMode .IN );
104
+ // source-string
105
+ function .registerStoredProcedureParameter ( "string" , String .class , ParameterMode .IN );
106
+
107
+ function .setParameter ( "search_char" , "." );
108
+ function .setParameter ( "string" , "org.hibernate.query" );
109
+
110
+ final Object singleResult = function .getSingleResult ();
111
+ Assertions .assertThat ( singleResult ).isInstanceOf ( Integer .class );
112
+ Assertions .assertThat ( singleResult ).isEqualTo ( 4 );
113
+ } );
114
+ }
115
+
116
+ @ Test
117
+ public void testUnRegisteredParameterByNameInvertedParameterRegistrationOrder (EntityManagerFactoryScope scope ) {
118
+ scope .inTransaction ( (em ) -> {
119
+ final StoredProcedureQuery function = em .createStoredProcedureQuery ( "find_char" , Integer .class );
120
+ function .setHint ( QueryHints .CALLABLE_FUNCTION , "true" );
121
+ // search-string
122
+ function .registerStoredProcedureParameter ( "string" , String .class , ParameterMode .IN );
123
+ // source-string
124
+ function .registerStoredProcedureParameter ( "search_char" , String .class , ParameterMode .IN );
125
+
126
+ function .setParameter ( "string" , "org.hibernate.query" );
127
+ function .setParameter ( "search_char" , "." );
128
+
129
+ final Object singleResult = function .getSingleResult ();
130
+ Assertions .assertThat ( singleResult ).isInstanceOf ( Integer .class );
131
+ Assertions .assertThat ( singleResult ).isEqualTo ( 4 );
132
+ } );
133
+ }
134
+
94
135
@ Test
95
136
@ TestForIssue (jiraKey = "HHH-15542" )
96
137
public void testStoredProcedureInAndOutAndRefCursorParameters (EntityManagerFactoryScope scope ) {
97
- String city = "London" ;
98
- String street = "Lollard Street" ;
99
- String zip = "SE116UG" ;
100
138
scope .inTransaction (
101
139
entityManager -> {
102
- Address address = new Address ( 1l , street , city , zip );
103
- entityManager .persist ( address );
140
+ StoredProcedureQuery query = entityManager .createStoredProcedureQuery ( "GET_ADDRESS_BY_NAME" );
141
+ query .registerStoredProcedureParameter ( "street_in" , String .class , ParameterMode .IN );
142
+ query .registerStoredProcedureParameter ( "city_in" , String .class , ParameterMode .IN );
143
+ query .registerStoredProcedureParameter ( "rec_out" , ResultSet .class , ParameterMode .REF_CURSOR );
144
+ query .registerStoredProcedureParameter ( "err_out" , String .class , ParameterMode .OUT );
145
+
146
+ query .setParameter ( "street_in" , STREET )
147
+ .setParameter ( "city_in" , CITY );
148
+ query .execute ();
149
+ ResultSet rs = (ResultSet ) query .getOutputParameterValue ( "rec_out" );
150
+ try {
151
+ assertTrue ( rs .next () );
152
+ assertThat ( rs .getString ( "street" ), is ( STREET ) );
153
+ assertThat ( rs .getString ( "city" ), is ( CITY ) );
154
+ assertThat ( rs .getString ( "zip" ), is ( ZIP ) );
155
+ }
156
+ catch (SQLException e ) {
157
+ throw new RuntimeException ( e );
158
+ }
104
159
}
105
160
);
161
+ }
162
+
163
+ @ Test
164
+ @ TestForIssue (jiraKey = "HHH-18280" )
165
+ public void testStoredProcedureInAndOutAndRefCursorParametersInvertedParamRegistationOrder (EntityManagerFactoryScope scope ) {
106
166
scope .inTransaction (
107
167
entityManager -> {
108
168
StoredProcedureQuery query = entityManager .createStoredProcedureQuery ( "GET_ADDRESS_BY_NAME" );
169
+ query .registerStoredProcedureParameter ( "city_in" , String .class , ParameterMode .IN );
109
170
query .registerStoredProcedureParameter ( "street_in" , String .class , ParameterMode .IN );
171
+ query .registerStoredProcedureParameter ( "rec_out" , ResultSet .class , ParameterMode .REF_CURSOR );
172
+ query .registerStoredProcedureParameter ( "err_out" , String .class , ParameterMode .OUT );
173
+
174
+ query .setParameter ( "street_in" , STREET )
175
+ .setParameter ( "city_in" , CITY );
176
+ query .execute ();
177
+ ResultSet rs = (ResultSet ) query .getOutputParameterValue ( "rec_out" );
178
+ try {
179
+ assertTrue ( rs .next () );
180
+ assertThat ( rs .getString ( "street" ), is ( STREET ) );
181
+ assertThat ( rs .getString ( "city" ), is ( CITY ) );
182
+ assertThat ( rs .getString ( "zip" ), is ( ZIP ) );
183
+ }
184
+ catch (SQLException e ) {
185
+ throw new RuntimeException ( e );
186
+ }
187
+ }
188
+ );
189
+ }
190
+
191
+ @ Test
192
+ @ TestForIssue (jiraKey = "HHH-18280" )
193
+ public void testStoredProcedureInAndOutAndRefCursorParametersInvertedParamRegistationOrder2 (EntityManagerFactoryScope scope ) {
194
+ scope .inTransaction (
195
+ entityManager -> {
196
+ StoredProcedureQuery query = entityManager .createStoredProcedureQuery ( "GET_ADDRESS_BY_NAME" );
110
197
query .registerStoredProcedureParameter ( "city_in" , String .class , ParameterMode .IN );
198
+ query .registerStoredProcedureParameter ( "street_in" , String .class , ParameterMode .IN );
111
199
query .registerStoredProcedureParameter ( "rec_out" , ResultSet .class , ParameterMode .REF_CURSOR );
112
200
query .registerStoredProcedureParameter ( "err_out" , String .class , ParameterMode .OUT );
113
201
114
- query .setParameter ( "street_in " , street )
115
- .setParameter ( "city_in " , city );
202
+ query .setParameter ( "city_in " , CITY )
203
+ .setParameter ( "street_in " , STREET );
116
204
query .execute ();
117
205
ResultSet rs = (ResultSet ) query .getOutputParameterValue ( "rec_out" );
118
206
try {
119
207
assertTrue ( rs .next () );
120
- assertThat ( rs .getString ( "street" ), is ( street ) );
121
- assertThat ( rs .getString ( "city" ), is ( city ) );
122
- assertThat ( rs .getString ( "zip" ), is ( zip ) );
208
+ assertThat ( rs .getString ( "street" ), is ( STREET ) );
209
+ assertThat ( rs .getString ( "city" ), is ( CITY ) );
210
+ assertThat ( rs .getString ( "zip" ), is ( ZIP ) );
123
211
}
124
212
catch (SQLException e ) {
125
213
throw new RuntimeException ( e );
@@ -510,6 +598,9 @@ public void prepareSchema(EntityManagerFactoryScope scope) {
510
598
phone2 .setValid ( false );
511
599
512
600
person1 .addPhone ( phone2 );
601
+
602
+ Address address = new Address ( 1l , STREET , CITY , ZIP );
603
+ entityManager .persist ( address );
513
604
} );
514
605
}
515
606
@@ -538,6 +629,7 @@ public void cleanUpSchema(EntityManagerFactoryScope scope) {
538
629
people .forEach ( em ::remove );
539
630
540
631
em .createQuery ( "delete IdHolder" ).executeUpdate ();
632
+ em .createQuery ( "delete Address" ).executeUpdate ();
541
633
});
542
634
} );
543
635
}
@@ -566,7 +658,7 @@ public static class IdHolder {
566
658
String name ;
567
659
}
568
660
569
- @ Entity
661
+ @ Entity ( name = "Address" )
570
662
@ Table (name ="ADDRESS_TABLE" )
571
663
public static class Address {
572
664
@ Id
0 commit comments