/* * 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.version.sybase; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Version; import org.junit.Test; import org.hibernate.Session; import org.hibernate.annotations.Generated; import org.hibernate.annotations.GenerationTime; import org.hibernate.annotations.Source; import org.hibernate.annotations.SourceType; import org.hibernate.annotations.Type; import org.hibernate.dialect.SybaseASE15Dialect; import org.hibernate.testing.RequiresDialect; import org.hibernate.testing.TestForIssue; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import org.hibernate.type.RowVersionType; import org.hibernate.type.VersionType; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; /** * @author Gail Badner */ @RequiresDialect( SybaseASE15Dialect.class ) public class SybaseTimestampComparisonAnnotationsTest extends BaseCoreFunctionalTestCase { @Test @TestForIssue( jiraKey = "HHH-10413" ) public void testComparableTimestamps() { final VersionType versionType = sessionFactory().getEntityPersister( Thing.class.getName() ).getVersionType(); assertSame( RowVersionType.INSTANCE, versionType ); Session s = openSession(); s.getTransaction().begin(); Thing thing = new Thing(); thing.name = "n"; s.persist( thing ); s.getTransaction().commit(); s.close(); byte[] previousVersion = thing.version; for ( int i = 0 ; i < 20 ; i++ ) { try { Thread.sleep(1000); //1000 milliseconds is one second. } catch(InterruptedException ex) { Thread.currentThread().interrupt(); } s = openSession(); s.getTransaction().begin(); thing.name = "n" + i; thing = (Thing) s.merge( thing ); s.getTransaction().commit(); s.close(); assertTrue( versionType.compare( previousVersion, thing.version ) < 0 ); previousVersion = thing.version; } s = openSession(); s.getTransaction().begin(); s.delete( thing ); s.getTransaction().commit(); s.close(); } @Override protected Class[] getAnnotatedClasses() { return new Class[] { Thing.class }; } @Entity @Table(name="thing") public static class Thing { @Id private long id; @Version @Generated(GenerationTime.ALWAYS) @Column(name = "ver", columnDefinition = "timestamp") private byte[] version; private String name; } }