/* * 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.annotations.lob; import org.junit.Test; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.testing.DialectChecks; import org.hibernate.testing.FailureExpected; import org.hibernate.testing.RequiresDialectFeature; import org.hibernate.testing.TestForIssue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** * @author Gail Badner */ @RequiresDialectFeature(DialectChecks.SupportsExpectedLobUsagePattern.class) public class VersionedLobTest extends AbstractLobTest<VersionedBook, VersionedCompiledCode> { @Override protected Class<VersionedBook> getBookClass() { return VersionedBook.class; } @Override protected Integer getId(VersionedBook book) { return book.getId(); } @Override protected Class<VersionedCompiledCode> getCompiledCodeClass() { return VersionedCompiledCode.class; } @Override protected Integer getId(VersionedCompiledCode compiledCode) { return compiledCode.getId(); } @Override protected Class[] getAnnotatedClasses() { return new Class[] { VersionedBook.class, VersionedCompiledCode.class }; } @Test public void testVersionUnchangedPrimitiveCharArray() throws Exception { VersionedBook book = createBook(); Editor editor = new Editor(); editor.setName( "O'Reilly" ); book.setEditor( editor ); book.setCode2( new char[] { 'r' } ); Session s; Transaction tx; s = openSession(); tx = s.beginTransaction(); s.persist( book ); tx.commit(); s.close(); s = openSession(); tx = s.beginTransaction(); VersionedBook loadedBook = getBookClass().cast( s.get( getBookClass(), getId( book ) ) ); assertEquals( loadedBook.getVersion(), Integer.valueOf( 0 ) ); s.flush(); assertEquals( loadedBook.getVersion(), Integer.valueOf( 0 ) ); s.delete( loadedBook ); tx.commit(); s.close(); } @Test public void testVersionUnchangedCharArray() throws Exception { Session s; Transaction tx; s = openSession(); tx = s.beginTransaction(); VersionedBook b = createBook(); b.setShortDescription( "Hibernate Bible" ); b.setCode( new Character[] { 'a', 'b', 'c' } ); s.persist( b ); tx.commit(); s.close(); s = openSession(); tx = s.beginTransaction(); VersionedBook b2 = getBookClass().cast( s.get( getBookClass(), getId( b ) ) ); assertNotNull( b2 ); assertEquals( b2.getCode()[1].charValue(), b.getCode()[1].charValue() ); assertEquals( b2.getVersion(), Integer.valueOf( 0 ) ); s.flush(); assertEquals( b2.getVersion(), Integer.valueOf( 0 ) ); s.delete( b2 ); tx.commit(); s.close(); } @Test public void testVersionUnchangedString() throws Exception { Session s; Transaction tx; s = openSession(); tx = s.beginTransaction(); VersionedBook b = createBook(); b.setShortDescription( "Hibernate Bible" ); b.setFullText( "Hibernate in Action aims to..." ); s.persist( b ); tx.commit(); s.close(); s = openSession(); tx = s.beginTransaction(); VersionedBook b2 = getBookClass().cast( s.get( getBookClass(), getId( b ) ) ); assertNotNull( b2 ); assertEquals( b2.getFullText(), b.getFullText() ); assertEquals( b2.getVersion(), Integer.valueOf( 0 ) ); s.flush(); assertEquals( b2.getVersion(), Integer.valueOf( 0 ) ); s.delete( b2 ); tx.commit(); s.close(); } @Test @TestForIssue( jiraKey = "HHH-5811") public void testVersionUnchangedByteArray() throws Exception { Session s; Transaction tx; s = openSession(); tx = s.beginTransaction(); VersionedCompiledCode cc = createCompiledCode(); Byte[] header = new Byte[2]; header[0] = new Byte( ( byte ) 3 ); header[1] = new Byte( ( byte ) 0 ); cc.setHeader( header ); s.persist( cc ); tx.commit(); s.close(); s = openSession(); tx = s.beginTransaction(); VersionedCompiledCode recompiled = getCompiledCodeClass().cast( s.get( getCompiledCodeClass(), getId( cc ) ) ); assertEquals( recompiled.getHeader()[1], cc.getHeader()[1] ); assertEquals( recompiled.getVersion(), Integer.valueOf( 0 ) ); s.flush(); assertEquals( recompiled.getVersion(), Integer.valueOf( 0 ) ); s.delete( recompiled ); tx.commit(); s.close(); } @Test public void testVersionUnchangedPrimitiveByteArray() throws Exception { Session s; Transaction tx; s = openSession(); tx = s.beginTransaction(); VersionedCompiledCode cc = createCompiledCode(); int codeSize = 5; byte[] full = new byte[codeSize]; for ( int i = 0; i < codeSize; i++ ) { full[i] = ( byte ) ( 1 + i ); } cc.setFullCode( full ); s.persist( cc ); tx.commit(); s.close(); s = openSession(); tx = s.beginTransaction(); VersionedCompiledCode recompiled = getCompiledCodeClass().cast( s.get( getCompiledCodeClass(), getId( cc ) ) ); assertEquals( recompiled.getFullCode()[codeSize - 1], cc.getFullCode()[codeSize - 1] ); assertEquals( recompiled.getVersion(), Integer.valueOf( 0 ) ); s.flush(); assertEquals( recompiled.getVersion(), Integer.valueOf( 0 ) ); s.delete( recompiled ); tx.commit(); s.close(); } }