/*
* 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.temporal;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Query;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.junit.Test;
/**
* @author Brett Meyer
*/
public class TemporalTypeTest extends BaseEntityManagerFunctionalTestCase {
@Test
public void testTemporalType() {
EntityManager em = getOrCreateEntityManager();
em.getTransaction().begin();
Date date = new Date();
Calendar calendar = Calendar.getInstance();
DataPoint dp = new DataPoint();
dp.date1 = date;
dp.date2 = date;
dp.calendar1 = calendar;
dp.calendar2 = calendar;
em.persist( dp );
em.getTransaction().commit();
em.close();
doTest("date1", date);
doTest("date1", calendar);
doTest("date2", date);
doTest("date2", calendar);
doTest("calendar1", date);
doTest("calendar1", calendar);
doTest("calendar2", date);
doTest("calendar2", calendar);
}
private void doTest(String property, Object obj) {
doTest( property, obj, TemporalType.DATE );
doTest( property, obj, TemporalType.TIMESTAMP );
}
private void doTest(String property, Object obj, TemporalType temporalType) {
EntityManager em = getOrCreateEntityManager();
em.getTransaction().begin();
Query query = em.createQuery("from DataPoint where " + property + " = :obj");
if (obj instanceof Calendar) {
query.setParameter("obj", (Calendar) obj, temporalType);
}
else {
query.setParameter("obj", (Date) obj, temporalType);
}
em.getTransaction().commit();
em.close();
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] { DataPoint.class };
}
@Entity(name = "DataPoint")
private static class DataPoint {
@Id @GeneratedValue
public long id;
@Temporal( TemporalType.DATE )
public Date date1;
@Temporal( TemporalType.TIMESTAMP )
public Date date2;
@Temporal( TemporalType.DATE )
public Calendar calendar1;
@Temporal( TemporalType.TIMESTAMP )
public Calendar calendar2;
}
}