Skip to content

Commit 0a1aa96

Browse files
committed
HHH-15283 - fix NPE for NamedNativeQuery + SqlResultSetMapping (columns)
1 parent 55efac6 commit 0a1aa96

File tree

2 files changed

+63
-21
lines changed

2 files changed

+63
-21
lines changed

hibernate-core/src/main/java/org/hibernate/query/results/complete/CompleteResultBuilderBasicValuedStandard.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -157,23 +157,14 @@ public boolean equals(Object o) {
157157
if ( o == null || getClass() != o.getClass() ) {
158158
return false;
159159
}
160-
161160
CompleteResultBuilderBasicValuedStandard that = (CompleteResultBuilderBasicValuedStandard) o;
162-
163-
if ( !Objects.equals( explicitColumnName, that.explicitColumnName ) ) {
164-
return false;
165-
}
166-
if ( !Objects.equals( explicitType, that.explicitType ) ) {
167-
return false;
168-
}
169-
return explicitJavaType.equals( that.explicitJavaType );
161+
return Objects.equals( explicitColumnName, that.explicitColumnName )
162+
&& Objects.equals( explicitType, that.explicitType )
163+
&& Objects.equals( explicitJavaType, that.explicitJavaType );
170164
}
171165

172166
@Override
173167
public int hashCode() {
174-
int result = explicitColumnName != null ? explicitColumnName.hashCode() : 0;
175-
result = 31 * result + ( explicitType != null ? explicitType.hashCode() : 0 );
176-
result = 31 * result + ( explicitJavaType != null ? explicitJavaType.hashCode() : 0 );
177-
return result;
168+
return Objects.hash( explicitColumnName, explicitType, explicitJavaType );
178169
}
179170
}

hibernate-core/src/test/java/org/hibernate/orm/test/query/resultmapping/NamedNativeQueryWithCountColumnTest.java

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,26 @@
77
package org.hibernate.orm.test.query.resultmapping;
88

99
import org.hibernate.cfg.AvailableSettings;
10+
import org.hibernate.dialect.H2Dialect;
1011

1112
import org.hibernate.testing.TestForIssue;
1213
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
1314
import org.hibernate.testing.orm.junit.Jpa;
15+
import org.hibernate.testing.orm.junit.RequiresDialect;
1416
import org.hibernate.testing.orm.junit.Setting;
17+
import org.junit.jupiter.api.AfterEach;
18+
import org.junit.jupiter.api.BeforeEach;
1519
import org.junit.jupiter.api.Test;
1620

1721
import jakarta.persistence.ColumnResult;
1822
import jakarta.persistence.Entity;
1923
import jakarta.persistence.Id;
2024
import jakarta.persistence.NamedNativeQuery;
2125
import jakarta.persistence.SqlResultSetMapping;
26+
import jakarta.persistence.Table;
27+
28+
import static org.hamcrest.CoreMatchers.is;
29+
import static org.hamcrest.MatcherAssert.assertThat;
2230

2331
/**
2432
* @author Nathan Xu
@@ -30,25 +38,68 @@
3038
@TestForIssue(jiraKey = "HHH-15070")
3139
class NamedNativeQueryWithCountColumnTest {
3240

41+
@BeforeEach
42+
public void setUp(EntityManagerFactoryScope scope) {
43+
scope.inTransaction(
44+
entityManager -> {
45+
for ( int i = 0; i < 3; i++ ) {
46+
Sample sample = new Sample( i, String.valueOf( i ) );
47+
entityManager.persist( sample );
48+
}
49+
}
50+
);
51+
}
52+
53+
@AfterEach
54+
public void tearDown(EntityManagerFactoryScope scope) {
55+
scope.inTransaction(
56+
entityManager ->
57+
entityManager.createQuery( "delete from Sample" ).executeUpdate()
58+
);
59+
}
60+
3361
@Test
34-
void testNoNullPointerExceptionThrown(EntityManagerFactoryScope scope) {
35-
scope.inTransaction( em ->em.createNamedQuery( "sample.count", Long.class ) );
62+
void testNamedNativeQuery(EntityManagerFactoryScope scope) {
63+
scope.inTransaction(
64+
entityManager ->
65+
entityManager.createNamedQuery( "sample.count", Long.class )
66+
);
67+
}
68+
69+
@Test
70+
@RequiresDialect(H2Dialect.class)
71+
void testNamedNativeQueryExecution(EntityManagerFactoryScope scope) {
72+
scope.inTransaction(
73+
entityManager -> {
74+
Long count = entityManager.createNamedQuery( "sample.count", Long.class ).getSingleResult();
75+
assertThat( count, is( 3L ) );
76+
} );
3677
}
3778

3879
@SqlResultSetMapping(
39-
name = "mapping",
40-
columns = @ColumnResult( name = "cnt" )
80+
name = "mapping",
81+
columns = @ColumnResult(name = "cnt")
4182
)
4283
@NamedNativeQuery(
43-
name = "sample.count",
44-
resultSetMapping = "mapping",
45-
query = "SELECT count(*) AS cnt FROM Sample"
84+
name = "sample.count",
85+
resultSetMapping = "mapping",
86+
query = "SELECT count(*) AS cnt FROM SAMPLE_TABLE"
4687
)
4788
@Entity(name = "Sample")
89+
@Table(name = "SAMPLE_TABLE")
4890
static class Sample {
4991

5092
@Id
51-
Long id;
93+
Integer id;
94+
95+
String name;
96+
97+
public Sample() {
98+
}
5299

100+
public Sample(Integer id, String name) {
101+
this.id = id;
102+
this.name = name;
103+
}
53104
}
54105
}

0 commit comments

Comments
 (0)