/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.jpa.test.query; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.Id; import javax.persistence.Query; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * @author Steve Ebersole */ public class DateTimeParameterTest extends BaseEntityManagerFunctionalTestCase { private static GregorianCalendar nowCal = new GregorianCalendar(); private static Date now = new Date( nowCal.getTime().getTime() ); @Override protected Class<?>[] getAnnotatedClasses() { return new Class[] { Thing.class }; } @Test public void testBindingCalendarAsDate() { createTestData(); EntityManager em = getOrCreateEntityManager(); em.getTransaction().begin(); try { Query query = em.createQuery( "from Thing t where t.someDate = :aDate" ); query.setParameter( "aDate", nowCal, TemporalType.DATE ); List list = query.getResultList(); assertEquals( 1, list.size() ); } finally { em.getTransaction().rollback(); em.close(); } deleteTestData(); } @Test public void testBindingNulls() { EntityManager em = getOrCreateEntityManager(); em.getTransaction().begin(); try { Query query = em.createQuery( "from Thing t where t.someDate = :aDate or t.someTime = :aTime or t.someTimestamp = :aTimestamp" ); query.setParameter( "aDate", (Date) null, TemporalType.DATE ); query.setParameter( "aTime", (Date) null, TemporalType.DATE ); query.setParameter( "aTimestamp", (Date) null, TemporalType.DATE ); } finally { em.getTransaction().rollback(); em.close(); } } private void createTestData() { EntityManager em = getOrCreateEntityManager(); em.getTransaction().begin(); em.persist( new Thing( 1, "test", now, now, now ) ); em.getTransaction().commit(); em.close(); } private void deleteTestData() { EntityManager em = getOrCreateEntityManager(); em.getTransaction().begin(); em.createQuery( "delete Thing" ).executeUpdate(); em.getTransaction().commit(); em.close(); } @Entity( name="Thing" ) @Table( name = "THING" ) public static class Thing { @Id public Integer id; public String someString; @Temporal( TemporalType.DATE ) public Date someDate; @Temporal( TemporalType.TIME ) public Date someTime; @Temporal( TemporalType.TIMESTAMP ) public Date someTimestamp; public Thing() { } public Thing(Integer id, String someString, Date someDate, Date someTime, Date someTimestamp) { this.id = id; this.someString = someString; this.someDate = someDate; this.someTime = someTime; this.someTimestamp = someTimestamp; } } }