1010import jakarta .persistence .Entity ;
1111import jakarta .persistence .EntityManager ;
1212import jakarta .persistence .Id ;
13+ import jakarta .persistence .Parameter ;
1314import jakarta .persistence .Query ;
1415import jakarta .persistence .Table ;
1516import jakarta .persistence .Temporal ;
1617import jakarta .persistence .TemporalType ;
1718
1819import org .hibernate .orm .test .jpa .BaseEntityManagerFunctionalTestCase ;
1920
21+ import org .junit .After ;
22+ import org .junit .Before ;
2023import org .junit .Test ;
2124
2225import static org .junit .Assert .assertEquals ;
@@ -35,8 +38,6 @@ protected Class<?>[] getAnnotatedClasses() {
3538
3639 @ Test
3740 public void testBindingCalendarAsDate () {
38- createTestData ();
39-
4041 EntityManager em = getOrCreateEntityManager ();
4142 em .getTransaction ().begin ();
4243
@@ -50,8 +51,6 @@ public void testBindingCalendarAsDate() {
5051 em .getTransaction ().rollback ();
5152 em .close ();
5253 }
53-
54- deleteTestData ();
5554 }
5655
5756 @ Test
@@ -71,15 +70,67 @@ public void testBindingNulls() {
7170 }
7271 }
7372
74- private void createTestData () {
73+
74+ @ Test
75+ public void testBindingNullNativeQueryPositional () {
76+ EntityManager em = getOrCreateEntityManager ();
77+ em .getTransaction ().begin ();
78+
79+ try {
80+ final Query query = em .createNativeQuery ( "update Thing set someDate = ?1 where id = 1" );
81+ //noinspection deprecation
82+ query .setParameter ( 1 , (Date ) null , TemporalType .DATE );
83+ assertEquals ( 1 , query .executeUpdate () );
84+ }
85+ finally {
86+ em .getTransaction ().rollback ();
87+ em .close ();
88+ }
89+ }
90+
91+ @ Test
92+ public void testBindingNullNativeQueryNamed () {
93+ EntityManager em = getOrCreateEntityManager ();
94+ em .getTransaction ().begin ();
95+ try {
96+ final Query query = em .createNativeQuery ( "update Thing set someDate = :me where id = 1" );
97+ Parameter <Date > p = new Parameter <>() {
98+ @ Override
99+ public String getName () {
100+ return "me" ;
101+ }
102+
103+ @ Override
104+ public Integer getPosition () {
105+ return null ;
106+ }
107+
108+ @ Override
109+ public Class <Date > getParameterType () {
110+ return Date .class ;
111+ }
112+ };
113+ //noinspection deprecation
114+ query .setParameter ( p , null , TemporalType .DATE );
115+ assertEquals ( 1 , query .executeUpdate () );
116+ }
117+ finally {
118+ em .getTransaction ().rollback ();
119+ em .close ();
120+ }
121+ }
122+
123+ @ Before
124+ public void createTestData () {
75125 EntityManager em = getOrCreateEntityManager ();
76126 em .getTransaction ().begin ();
77127 em .persist ( new Thing ( 1 , "test" , now , now , now ) );
78128 em .getTransaction ().commit ();
79129 em .close ();
80130 }
81131
82- private void deleteTestData () {
132+ @ After
133+ public void deleteTestData () {
83134 EntityManager em = getOrCreateEntityManager ();
84135 em .getTransaction ().begin ();
85136 em .createQuery ( "delete Thing" ).executeUpdate ();
0 commit comments