Skip to content

Commit baedaae

Browse files
msfmmbellade
authored andcommitted
HHH-17151 Add test for issue
1 parent 6b462c1 commit baedaae

File tree

1 file changed

+78
-58
lines changed

1 file changed

+78
-58
lines changed

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

Lines changed: 78 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,100 +6,120 @@
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;
23+
import java.util.Date;
24+
import java.util.GregorianCalendar;
25+
import java.util.List;
2126

22-
import org.junit.Test;
27+
import org.hibernate.SessionFactory;
2328

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

2631
/**
2732
* @author Steve Ebersole
2833
*/
29-
public class DateTimeParameterTest extends BaseEntityManagerFunctionalTestCase {
34+
@Jpa(annotatedClasses = {DateTimeParameterTest.Thing.class})
35+
public class DateTimeParameterTest {
3036
private static GregorianCalendar nowCal = new GregorianCalendar();
3137
private static Date now = new Date( nowCal.getTime().getTime() );
3238

33-
@Override
34-
protected Class<?>[] getAnnotatedClasses() {
35-
return new Class[] { Thing.class };
36-
}
37-
3839
@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" );
40+
public void testBindingCalendarAsDate(EntityManagerFactoryScope scope) {
41+
scope.inTransaction( entityManager -> {
42+
final Query query = entityManager.createQuery( "from Thing t where t.someDate = :aDate" );
4743
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();
44+
final List list = query.getResultList();
45+
assertThat( list.size() ).isEqualTo( 1 );
46+
} );
5747
}
5848

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

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();
102+
@BeforeEach
103+
public void createTestData(EntityManagerFactoryScope scope) {
104+
scope.inTransaction( entityManager -> entityManager.persist( new Thing( 1, "test", now, now, now ) ) );
82105
}
83106

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();
107+
@AfterEach
108+
public void deleteTestData(EntityManagerFactoryScope scope) {
109+
scope.inTransaction( entityManager -> entityManager.createQuery( "delete from Thing" ).executeUpdate() );
90110
}
91111

92-
@Entity( name="Thing" )
93-
@Table( name = "THING" )
112+
@Entity(name = "Thing")
113+
@Table(name = "Thing")
94114
public static class Thing {
95115
@Id
96116
public Integer id;
97117
public String someString;
98-
@Temporal( TemporalType.DATE )
118+
@Temporal(TemporalType.DATE)
99119
public Date someDate;
100-
@Temporal( TemporalType.TIME )
120+
@Temporal(TemporalType.TIME)
101121
public Date someTime;
102-
@Temporal( TemporalType.TIMESTAMP )
122+
@Temporal(TemporalType.TIMESTAMP)
103123
public Date someTimestamp;
104124

105125
public Thing() {

0 commit comments

Comments
 (0)