⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bulkmanipulationtest.java

📁 hibernate 开源框架的代码 jar包希望大家能喜欢
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
// $Id: BulkManipulationTest.java 10977 2006-12-12 23:28:04Z steve.ebersole@jboss.com $package org.hibernate.test.hql;import java.util.ArrayList;import java.util.Date;import java.util.List;import junit.framework.Test;import org.hibernate.QueryException;import org.hibernate.Transaction;import org.hibernate.classic.Session;import org.hibernate.dialect.MySQLDialect;import org.hibernate.hql.ast.HqlSqlWalker;import org.hibernate.id.IdentifierGenerator;import org.hibernate.junit.functional.FunctionalTestCase;import org.hibernate.junit.functional.FunctionalTestClassTestSuite;import org.hibernate.persister.entity.EntityPersister;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Tests execution of bulk UPDATE/DELETE statements through the new AST parser. * * @author Steve Ebersole */public class BulkManipulationTest extends FunctionalTestCase {	private static final Logger log = LoggerFactory.getLogger( BulkManipulationTest.class );	public BulkManipulationTest(String name) {		super( name );	}	public static Test suite() {		return new FunctionalTestClassTestSuite( BulkManipulationTest.class );	}	public String[] getMappings() {		return new String[] {				"hql/Animal.hbm.xml",		        "hql/Vehicle.hbm.xml",		        "hql/KeyManyToOneEntity.hbm.xml",		        "hql/Versions.hbm.xml",				"hql/FooBarCopy.hbm.xml",				"legacy/Multi.hbm.xml",				"hql/EntityWithCrazyCompositeKey.hbm.xml",				"hql/SimpleEntityWithAssociation.hbm.xml",				"hql/BooleanLiteralEntity.hbm.xml"		};	}	// Non-exists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	public void testDeleteNonExistentEntity() {		Session s = openSession();		Transaction t = s.beginTransaction();		try {			s.createQuery( "delete NonExistentEntity" ).executeUpdate();			fail( "no exception thrown" );		}		catch( QueryException e ) {			log.debug( "Caught expected error type : " + e.getMessage() );		}		t.commit();		s.close();	}	public void testUpdateNonExistentEntity() {		Session s = openSession();		Transaction t = s.beginTransaction();		try {			s.createQuery( "update NonExistentEntity e set e.someProp = ?" ).executeUpdate();			fail( "no exception thrown" );		}		catch( QueryException e ) {			log.debug( "Caught expected error type : " + e.getMessage() );		}		t.commit();		s.close();	}	public void testTempTableGenerationIsolation() throws Throwable{		Session s = openSession();		s.beginTransaction();		Truck truck = new Truck();		truck.setVin( "123t" );		truck.setOwner( "Steve" );		s.save( truck );		// manually flush the session to ensure the insert happens		s.flush();		// now issue a bulk delete against Car which should force the temp table to be		// created.  we need to test to ensure that this does not cause the transaction		// to be committed...		s.createQuery( "delete from Vehicle" ).executeUpdate();		s.getTransaction().rollback();		s.close();		s = openSession();		s.beginTransaction();		List list = s.createQuery( "from Car" ).list();		assertEquals( "temp table gen caused premature commit", 0, list.size() );		s.createQuery( "delete from Car" ).executeUpdate();		s.getTransaction().rollback();		s.close();	}	// BOOLEAN HANDLING ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	public void testBooleanHandling() {		TestData data = new TestData();		data.prepare();		Session s = openSession();		Transaction t = s.beginTransaction();		// currently, we need the three different binds because they are different underlying types...		int count = s.createQuery( "update BooleanLiteralEntity set yesNoBoolean = :b1, trueFalseBoolean = :b2, zeroOneBoolean = :b3" )				.setBoolean( "b1", true )				.setBoolean( "b2", true )				.setBoolean( "b3", true )				.executeUpdate();		assertEquals( 1, count );		BooleanLiteralEntity entity = ( BooleanLiteralEntity ) s.createQuery( "from BooleanLiteralEntity" ).uniqueResult();		assertTrue( entity.isYesNoBoolean() );		assertTrue( entity.isTrueFalseBoolean() );		assertTrue( entity.isZeroOneBoolean() );		s.clear();		count = s.createQuery( "update BooleanLiteralEntity set yesNoBoolean = true, trueFalseBoolean = true, zeroOneBoolean = true" )				.executeUpdate();		assertEquals( 1, count );		entity = ( BooleanLiteralEntity ) s.createQuery( "from BooleanLiteralEntity" ).uniqueResult();		assertTrue( entity.isYesNoBoolean() );		assertTrue( entity.isTrueFalseBoolean() );		assertTrue( entity.isZeroOneBoolean() );		t.commit();		s.close();		data.cleanup();	}	// INSERTS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	public void testSimpleInsert() {		TestData data = new TestData();		data.prepare();		Session s = openSession();		Transaction t = s.beginTransaction();		s.createQuery( "insert into Pickup (id, vin, owner) select id, vin, owner from Car" ).executeUpdate();				t.commit();		t = s.beginTransaction();		s.createQuery( "delete Vehicle" ).executeUpdate();				t.commit();		s.close();		data.cleanup();	}	public void testSimpleNativeSQLInsert() {		TestData data = new TestData();		data.prepare();		Session s = openSession();		Transaction t = s.beginTransaction();		List l = s.createQuery("from Vehicle").list();		assertEquals(l.size(),4);		s.createSQLQuery( "insert into PICKUP (id, vin, owner) select id, vin, owner from Car" ).executeUpdate();		l = s.createQuery("from Vehicle").list();		assertEquals(l.size(),5);		t.commit();		t = s.beginTransaction();		s.createSQLQuery( "delete from TRUCK" ).executeUpdate();		l = s.createQuery("from Vehicle").list();		assertEquals(l.size(),4);		Car c = (Car) s.createQuery( "from Car where owner = 'Kirsten'" ).uniqueResult();		c.setOwner("NotKirsten");		assertEquals(0,s.getNamedQuery( "native-delete-car" ).setString( 0, "Kirsten" ).executeUpdate());		assertEquals(1,s.getNamedQuery( "native-delete-car" ).setString( 0, "NotKirsten" ).executeUpdate());						assertEquals(0,s.createSQLQuery( "delete from SUV where owner = :owner" ).setString( "owner", "NotThere" ).executeUpdate());		assertEquals(1,s.createSQLQuery( "delete from SUV where owner = :owner" ).setString( "owner", "Joe" ).executeUpdate());		s.createSQLQuery( "delete from PICKUP" ).executeUpdate();		l = s.createQuery("from Vehicle").list();		assertEquals(l.size(),0);		t.commit();		s.close();		data.cleanup();	}		public void testInsertWithManyToOne() {		TestData data = new TestData();		data.prepare();		Session s = openSession();		Transaction t = s.beginTransaction();		s.createQuery( "insert into Animal (description, bodyWeight, mother) select description, bodyWeight, mother from Human" ).executeUpdate();		t.commit();		t = s.beginTransaction();		t.commit();		s.close();		data.cleanup();	}	public void testInsertWithMismatchedTypes() {		TestData data = new TestData();		data.prepare();		Session s = openSession();		Transaction t = s.beginTransaction();		try {			s.createQuery( "insert into Pickup (owner, vin, id) select id, vin, owner from Car" ).executeUpdate();			fail( "mismatched types did not error" );		}		catch( QueryException e ) {			// expected result		}		t.commit();		t = s.beginTransaction();		s.createQuery( "delete Vehicle" ).executeUpdate();		t.commit();		s.close();		data.cleanup();	}	public void testInsertIntoSuperclassPropertiesFails() {		TestData data = new TestData();		data.prepare();		Session s = openSession();		Transaction t = s.beginTransaction();		try {			s.createQuery( "insert into Human (id, bodyWeight) select id, bodyWeight from Lizard" ).executeUpdate();			fail( "superclass prop insertion did not error" );		}		catch( QueryException e ) {			// expected result		}		t.commit();		t = s.beginTransaction();		s.createQuery( "delete Animal where mother is not null" ).executeUpdate();		s.createQuery( "delete Animal where father is not null" ).executeUpdate();		s.createQuery( "delete Animal" ).executeUpdate();		t.commit();		s.close();		data.cleanup();	}	public void testInsertAcrossMappedJoinFails() {		TestData data = new TestData();		data.prepare();		Session s = openSession();		Transaction t = s.beginTransaction();		try {			s.createQuery( "insert into Joiner (name, joinedName) select vin, owner from Car" ).executeUpdate();			fail( "mapped-join insertion did not error" );		}		catch( QueryException e ) {			// expected result		}		t.commit();		t = s.beginTransaction();		s.createQuery( "delete Joiner" ).executeUpdate();		s.createQuery( "delete Vehicle" ).executeUpdate();		t.commit();		s.close();		data.cleanup();	}	public void testInsertWithGeneratedId() {		// Make sure the env supports bulk inserts with generated ids...		EntityPersister persister = sfi().getEntityPersister( PettingZoo.class.getName() );		IdentifierGenerator generator = persister.getIdentifierGenerator();		if ( !HqlSqlWalker.supportsIdGenWithBulkInsertion( generator ) ) {			return;		}		// create a Zoo		Zoo zoo = new Zoo();		zoo.setName( "zoo" );		Session s = openSession();		Transaction t = s.beginTransaction();		s.save( zoo );		t.commit();		s.close();		s = openSession();		t = s.beginTransaction();		int count = s.createQuery( "insert into PettingZoo (name) select name from Zoo" ).executeUpdate();		t.commit();		s.close();		assertEquals( "unexpected insertion count", 1, count );		s = openSession();		t = s.beginTransaction();		PettingZoo pz = ( PettingZoo ) s.createQuery( "from PettingZoo" ).uniqueResult();		t.commit();		s.close();		assertEquals( zoo.getName(), pz.getName() );		assertTrue( zoo.getId() != pz.getId() );		s = openSession();		t = s.beginTransaction();		s.createQuery( "delete Zoo" ).executeUpdate();		t.commit();		s.close();	}	public void testInsertWithGeneratedVersionAndId() {		// Make sure the env supports bulk inserts with generated ids...		EntityPersister persister = sfi().getEntityPersister( IntegerVersioned.class.getName() );		IdentifierGenerator generator = persister.getIdentifierGenerator();		if ( !HqlSqlWalker.supportsIdGenWithBulkInsertion( generator ) ) {			return;		}		Session s = openSession();		Transaction t = s.beginTransaction();		IntegerVersioned entity = new IntegerVersioned( "int-vers" );		s.save( entity );		s.createQuery( "select id, name, version from IntegerVersioned" ).list();		t.commit();		s.close();		Long initialId = entity.getId();		int initialVersion = entity.getVersion();		s = openSession();		t = s.beginTransaction();		int count = s.createQuery( "insert into IntegerVersioned ( name ) select name from IntegerVersioned" ).executeUpdate();		t.commit();		s.close();		assertEquals( "unexpected insertion count", 1, count );		s = openSession();		t = s.beginTransaction();		IntegerVersioned created = ( IntegerVersioned ) s.createQuery( "from IntegerVersioned where id <> :initialId" )				.setLong( "initialId", initialId.longValue() )				.uniqueResult();		t.commit();		s.close();		assertEquals( "version was not seeded", initialVersion, created.getVersion() );		s = openSession();		t = s.beginTransaction();		s.createQuery( "delete IntegerVersioned" ).executeUpdate();		t.commit();		s.close();	}	public void testInsertWithGeneratedTimestampVersion() {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -