Skip to content

Commit 7536494

Browse files
msfmmbellade
authored andcommitted
HHH-17151 Add test for issue
1 parent 622dc78 commit 7536494

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
@@ -4,100 +4,118 @@
44
*/
55
package org.hibernate.orm.test.jpa.query;
66

7-
import java.util.Date;
8-
import java.util.GregorianCalendar;
9-
import java.util.List;
107
import jakarta.persistence.Entity;
11-
import jakarta.persistence.EntityManager;
128
import jakarta.persistence.Id;
9+
import jakarta.persistence.Parameter;
1310
import jakarta.persistence.Query;
1411
import jakarta.persistence.Table;
1512
import jakarta.persistence.Temporal;
1613
import jakarta.persistence.TemporalType;
14+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
15+
import org.hibernate.testing.orm.junit.Jira;
16+
import org.hibernate.testing.orm.junit.Jpa;
17+
import org.junit.jupiter.api.AfterEach;
18+
import org.junit.jupiter.api.BeforeEach;
19+
import org.junit.jupiter.api.Test;
1720

18-
import org.hibernate.orm.test.jpa.BaseEntityManagerFunctionalTestCase;
19-
20-
import org.junit.Test;
21+
import java.util.Date;
22+
import java.util.GregorianCalendar;
23+
import java.util.List;
2124

22-
import static org.junit.Assert.assertEquals;
25+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
2326

2427
/**
2528
* @author Steve Ebersole
2629
*/
27-
public class DateTimeParameterTest extends BaseEntityManagerFunctionalTestCase {
30+
@Jpa(annotatedClasses = {DateTimeParameterTest.Thing.class})
31+
public class DateTimeParameterTest {
2832
private static GregorianCalendar nowCal = new GregorianCalendar();
2933
private static Date now = new Date( nowCal.getTime().getTime() );
3034

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

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

74-
private void createTestData() {
75-
EntityManager em = getOrCreateEntityManager();
76-
em.getTransaction().begin();
77-
em.persist( new Thing( 1, "test", now, now, now ) );
78-
em.getTransaction().commit();
79-
em.close();
98+
@BeforeEach
99+
public void createTestData(EntityManagerFactoryScope scope) {
100+
scope.inTransaction( entityManager -> entityManager.persist( new Thing( 1, "test", now, now, now ) ) );
80101
}
81102

82-
private void deleteTestData() {
83-
EntityManager em = getOrCreateEntityManager();
84-
em.getTransaction().begin();
85-
em.createQuery( "delete Thing" ).executeUpdate();
86-
em.getTransaction().commit();
87-
em.close();
103+
@AfterEach
104+
public void deleteTestData(EntityManagerFactoryScope scope) {
105+
scope.getEntityManagerFactory().getSchemaManager().truncate();
88106
}
89107

90-
@Entity( name="Thing" )
91-
@Table( name = "THING" )
108+
@Entity(name = "Thing")
109+
@Table(name = "Thing")
92110
public static class Thing {
93111
@Id
94112
public Integer id;
95113
public String someString;
96-
@Temporal( TemporalType.DATE )
114+
@Temporal(TemporalType.DATE)
97115
public Date someDate;
98-
@Temporal( TemporalType.TIME )
116+
@Temporal(TemporalType.TIME)
99117
public Date someTime;
100-
@Temporal( TemporalType.TIMESTAMP )
118+
@Temporal(TemporalType.TIMESTAMP)
101119
public Date someTimestamp;
102120

103121
public Thing() {

0 commit comments

Comments
 (0)