/*
* 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.test.temporal;
import java.sql.Time;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.junit.Test;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
/**
* @author Gail Badner
*/
public class TimePropertyTest extends BaseCoreFunctionalTestCase {
private final DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
@Test
public void testTimeAsDate() {
final Entity eOrig = new Entity();
eOrig.tAsDate = new Time( new Date().getTime() );
Session s = openSession();
s.getTransaction().begin();
s.persist( eOrig );
s.getTransaction().commit();
s.close();
s = openSession();
s.getTransaction().begin();
final Entity eGotten = (Entity) s.get( Entity.class, eOrig.id );
// Some databases retain the milliseconds when being inserted and some don't;
final String tAsDateOrigFormatted = timeFormat.format( eOrig.tAsDate );
final String tAsDateGottenFormatted = timeFormat.format( eGotten.tAsDate );
assertEquals( tAsDateOrigFormatted, tAsDateGottenFormatted );
s.getTransaction().commit();
s.close();
s = openSession();
s.getTransaction().begin();
String queryString = "from TimePropertyTest$Entity where tAsDate = ?";
if( SQLServerDialect.class.isAssignableFrom( getDialect().getClass() )) {
queryString = "from TimePropertyTest$Entity where tAsDate = cast ( ? as time )";
}
final Query queryWithParameter = s.createQuery( queryString ).setParameter( 0, eGotten.tAsDate );
final Entity eQueriedWithParameter = (Entity) queryWithParameter.uniqueResult();
assertNotNull( eQueriedWithParameter );
s.getTransaction().commit();
s.close();
s = openSession();
s.getTransaction().begin();
final Query query = s.createQuery( queryString ).setTime( 0, eGotten.tAsDate );
final Entity eQueried = (Entity) query.uniqueResult();
assertNotNull( eQueried );
s.getTransaction().commit();
s.close();
s = openSession();
s.getTransaction().begin();
s.delete( eQueried );
s.getTransaction().commit();
s.close();
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class[] { Entity.class };
}
@javax.persistence.Entity
@Table(name = "entity")
public static class Entity {
@GeneratedValue
@Id
private long id;
@Temporal( value = TemporalType.TIME )
private java.util.Date tAsDate;
}
}