Skip to content

Commit 2f60027

Browse files
msfmmbellade
authored andcommitted
HHH-17151 Add test for issue
1 parent 1699573 commit 2f60027

File tree

1 file changed

+77
-59
lines changed

1 file changed

+77
-59
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/jpa/query/DateTimeParameterTest.java

Lines changed: 77 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,100 +6,118 @@
66
*/
77
package org.hibernate.orm.test.jpa.query;
88

9-
import java.util.Date;
10-
import java.util.GregorianCalendar;
11-
import java.util.List;
129
import jakarta.persistence.Entity;
13-
import jakarta.persistence.EntityManager;
1410
import jakarta.persistence.Id;
11+
import jakarta.persistence.Parameter;
1512
import jakarta.persistence.Query;
1613
import jakarta.persistence.Table;
1714
import jakarta.persistence.Temporal;
1815
import jakarta.persistence.TemporalType;
16+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
17+
import org.hibernate.testing.orm.junit.Jira;
18+
import org.hibernate.testing.orm.junit.Jpa;
19+
import org.junit.jupiter.api.AfterEach;
20+
import org.junit.jupiter.api.BeforeEach;
21+
import org.junit.jupiter.api.Test;
1922

20-
import org.hibernate.orm.test.jpa.BaseEntityManagerFunctionalTestCase;
21-
22-
import org.junit.Test;
23+
import java.util.Date;
24+
import java.util.GregorianCalendar;
25+
import java.util.List;
2326

24-
import static org.junit.Assert.assertEquals;
27+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
2528

2629
/**
2730
* @author Steve Ebersole
2831
*/
29-
public class DateTimeParameterTest extends BaseEntityManagerFunctionalTestCase {
32+
@Jpa(annotatedClasses = {DateTimeParameterTest.Thing.class})
33+
public class DateTimeParameterTest {
3034
private static GregorianCalendar nowCal = new GregorianCalendar();
3135
private static Date now = new Date( nowCal.getTime().getTime() );
3236

33-
@Override
34-
protected Class<?>[] getAnnotatedClasses() {
35-
return new Class[] { Thing.class };
36-
}
37-
3837
@Test
39-
public void testBindingCalendarAsDate() {
40-
createTestData();
41-
42-
EntityManager em = getOrCreateEntityManager();
43-
em.getTransaction().begin();
44-
45-
try {
46-
Query query = em.createQuery( "from Thing t where t.someDate = :aDate" );
38+
public void testBindingCalendarAsDate(EntityManagerFactoryScope scope) {
39+
scope.inTransaction( entityManager -> {
40+
final Query query = entityManager.createQuery( "from Thing t where t.someDate = :aDate" );
4741
query.setParameter( "aDate", nowCal, TemporalType.DATE );
48-
List list = query.getResultList();
49-
assertEquals( 1, list.size() );
50-
}
51-
finally {
52-
em.getTransaction().rollback();
53-
em.close();
54-
}
55-
56-
deleteTestData();
42+
final List list = query.getResultList();
43+
assertThat( list.size() ).isEqualTo( 1 );
44+
} );
5745
}
5846

5947
@Test
60-
public void testBindingNulls() {
61-
EntityManager em = getOrCreateEntityManager();
62-
em.getTransaction().begin();
63-
64-
try {
65-
Query query = em.createQuery( "from Thing t where t.someDate = :aDate or t.someTime = :aTime or t.someTimestamp = :aTimestamp" );
48+
public void testBindingNulls(EntityManagerFactoryScope scope) {
49+
scope.inTransaction( entityManager -> {
50+
final Query query = entityManager.createQuery(
51+
"from Thing t where t.someDate = :aDate or t.someTime = :aTime or t.someTimestamp = :aTimestamp"
52+
);
6653
query.setParameter( "aDate", (Date) null, TemporalType.DATE );
6754
query.setParameter( "aTime", (Date) null, TemporalType.DATE );
6855
query.setParameter( "aTimestamp", (Date) null, TemporalType.DATE );
69-
}
70-
finally {
71-
em.getTransaction().rollback();
72-
em.close();
73-
}
56+
} );
57+
58+
}
59+
60+
@Test
61+
@Jira("https://hibernate.atlassian.net/browse/HHH-17151")
62+
public void testBindingNullNativeQueryPositional(EntityManagerFactoryScope scope) {
63+
scope.inTransaction( entityManager -> {
64+
final Query query = entityManager.createNativeQuery( "update Thing set someDate = ?1 where id = 1" );
65+
//noinspection deprecation
66+
query.setParameter( 1, (Date) null, TemporalType.DATE );
67+
assertThat( query.executeUpdate() ).isEqualTo( 1 );
68+
} );
69+
scope.inTransaction( entityManager -> assertThat( entityManager.find( Thing.class, 1 ).someDate ).isNull() );
70+
}
71+
72+
@Test
73+
@Jira("https://hibernate.atlassian.net/browse/HHH-17151")
74+
public void testBindingNullNativeQueryNamed(EntityManagerFactoryScope scope) {
75+
scope.inTransaction( entityManager -> {
76+
final Query query = entityManager.createNativeQuery( "update Thing set someDate = :me where id = 1" );
77+
Parameter<Date> p = new Parameter<>() {
78+
@Override
79+
public String getName() {
80+
return "me";
81+
}
82+
83+
@Override
84+
public Integer getPosition() {
85+
return null;
86+
}
87+
88+
@Override
89+
public Class<Date> getParameterType() {
90+
return Date.class;
91+
}
92+
};
93+
//noinspection deprecation
94+
query.setParameter( p, null, TemporalType.DATE );
95+
assertThat( query.executeUpdate() ).isEqualTo( 1 );
96+
} );
97+
scope.inTransaction( entityManager -> assertThat( entityManager.find( Thing.class, 1 ).someDate ).isNull() );
7498
}
7599

76-
private void createTestData() {
77-
EntityManager em = getOrCreateEntityManager();
78-
em.getTransaction().begin();
79-
em.persist( new Thing( 1, "test", now, now, now ) );
80-
em.getTransaction().commit();
81-
em.close();
100+
@BeforeEach
101+
public void createTestData(EntityManagerFactoryScope scope) {
102+
scope.inTransaction( entityManager -> entityManager.persist( new Thing( 1, "test", now, now, now ) ) );
82103
}
83104

84-
private void deleteTestData() {
85-
EntityManager em = getOrCreateEntityManager();
86-
em.getTransaction().begin();
87-
em.createQuery( "delete Thing" ).executeUpdate();
88-
em.getTransaction().commit();
89-
em.close();
105+
@AfterEach
106+
public void deleteTestData(EntityManagerFactoryScope scope) {
107+
scope.inTransaction( entityManager -> entityManager.createQuery( "delete from Thing" ).executeUpdate() );
90108
}
91109

92-
@Entity( name="Thing" )
93-
@Table( name = "THING" )
110+
@Entity(name = "Thing")
111+
@Table(name = "Thing")
94112
public static class Thing {
95113
@Id
96114
public Integer id;
97115
public String someString;
98-
@Temporal( TemporalType.DATE )
116+
@Temporal(TemporalType.DATE)
99117
public Date someDate;
100-
@Temporal( TemporalType.TIME )
118+
@Temporal(TemporalType.TIME)
101119
public Date someTime;
102-
@Temporal( TemporalType.TIMESTAMP )
120+
@Temporal(TemporalType.TIMESTAMP)
103121
public Date someTimestamp;
104122

105123
public Thing() {

0 commit comments

Comments
 (0)