multirepresentationtest.java

来自「好东西,hibernate-3.2.0,他是一开元的树杖hibernate-3.」· Java 代码 · 共 190 行

JAVA
190
字号
// $Id: MultiRepresentationTest.java 6300 2005-04-03 04:24:23Z oneovthafew $
package org.hibernate.test.entity;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;

import junit.framework.Test;
import junit.framework.TestSuite;

import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.hibernate.EntityMode;
import org.hibernate.HibernateException;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.impl.SessionImpl;
import org.hibernate.test.TestCase;

/**
 * Implementation of MultiRepresentationTest.
 *
 * @author Steve Ebersole
 */
public class MultiRepresentationTest extends TestCase {

	Long stockId;
	Long valId;

	public MultiRepresentationTest(String name) {
		super(name);
	}

	public void testPojoRetreival() {
		Session session = openSession();
		Transaction txn = session.beginTransaction();

		prepareTestData( session );

		Stock stock = ( Stock ) session.get( Stock.class, new Long(1) );
		assertEquals( "Something wrong!", new Long(1), stock.getId() );

		txn.rollback();
		session.close();
	}

	public void testDom4jRetreival() {
		Session session = openSession();
		Transaction txn = session.beginTransaction();
		org.hibernate.Session dom4j = session.getSession( EntityMode.DOM4J );

		prepareTestData( session );

		Object rtn = dom4j.get( Stock.class.getName(), stockId );
		Element element = ( Element ) rtn;

		assertEquals( "Something wrong!", stockId, Long.valueOf( element.attributeValue("id") ) );

		System.out.println("**** XML: ****************************************************");
		prettyPrint( element );
		System.out.println("**************************************************************");

		Element currVal = element.element( "currentValuation");

		System.out.println("**** XML: ****************************************************");
		prettyPrint( currVal );
		System.out.println("**************************************************************");


		txn.rollback();
		session.close();
	}

	public void testDom4jSave() {
		Session pojos = openSession();
		Transaction txn = pojos.beginTransaction();

		prepareTestData( pojos );

		org.hibernate.Session dom4j = pojos.getSession( EntityMode.DOM4J );

		Element stock = DocumentFactory.getInstance().createElement( "stock" );
		stock.addElement( "tradeSymbol" ).setText( "IBM" );

		Element val = stock.addElement( "currentValuation" ).addElement( "valuation" );
		val.appendContent( stock );
		val.addElement( "valuationDate" ).setText( new java.util.Date().toString() );
		val.addElement( "value" ).setText( "121.00" );

		dom4j.save( Stock.class.getName(), stock );
		dom4j.flush();

		txn.rollback();

		pojos.close();

		assertTrue( !pojos.isOpen() );
		assertTrue( !dom4j.isOpen() );

		prettyPrint( stock );
	}

	public void testDom4jHQL() {
		Session session = openSession();
		Transaction txn = session.beginTransaction();
		org.hibernate.Session dom4j = session.getSession( EntityMode.DOM4J );

		prepareTestData( session );

		List result = dom4j.createQuery( "from Stock" ).list();

		assertEquals( "Incorrect result size", 1, result.size() );
		Element element = ( Element ) result.get( 0 );
		assertEquals( "Something wrong!", stockId, Long.valueOf( element.attributeValue("id") ) );

		System.out.println("**** XML: ****************************************************");
		prettyPrint( element );
		System.out.println("**************************************************************");

		txn.rollback();
		session.close();
	}

	private void prepareTestData(Session session) throws HibernateException {
		try {
			IdentifierGenerator stockIdGen = ( (SessionFactoryImplementor) session.getSessionFactory() )
			        .getIdentifierGenerator( Stock.class.getName() );
			IdentifierGenerator valIdGen = ( (SessionFactoryImplementor) session.getSessionFactory() )
			        .getIdentifierGenerator( Valuation.class.getName() );

			stockId = ( Long ) stockIdGen.generate( (SessionImpl) session, null );
			valId = ( Long ) valIdGen.generate( (SessionImpl) session, null );

			Connection conn = session.connection();
			PreparedStatement ps = conn.prepareStatement( "INSERT INTO STOCK VALUES (?,?,?)");
			ps.setLong( 1, stockId.longValue() );
			ps.setString( 2, "JBOSS" );
			ps.setNull(3, Types.BIGINT);
			ps.executeUpdate();
			ps.close();

			ps = conn.prepareStatement( "INSERT INTO STOCK_VAL VALUES (?,?,?,?)" );
			ps.setLong( 1, valId.longValue() );
			ps.setLong( 2, stockId.longValue() );
			ps.setDate( 3, new Date( new java.util.Date().getTime() ) );
			ps.setDouble( 4, 200.0 );
			ps.executeUpdate();
			ps.close();

			ps = conn.prepareStatement( "UPDATE STOCK SET CURR_VAL_ID = ? WHERE STOCK_ID = ?" );
			ps.setLong( 1, valId.longValue() );
			ps.setLong( 2, stockId.longValue() );
			ps.executeUpdate();
			ps.close();
		}
		catch( SQLException e ) {
			System.err.println( "Error : " + e );
			e.printStackTrace();
			throw new HibernateException("Unable to generate test data",e);
		}
	}

	private void prettyPrint(Element element) {
		//System.out.println( element.asXML() );
		try {
			OutputFormat format = OutputFormat.createPrettyPrint();
			new XMLWriter( System.out, format ).write( element );
			System.out.println();
		}
		catch( Throwable t ) {
			System.err.println("Unable to pretty print element : " + t);
		}
	}

	public static Test suite() {
		return new TestSuite( MultiRepresentationTest.class );
	}

	protected String[] getMappings() {
		return new String[] {"entity/Stock.hbm.xml", "entity/Valuation.hbm.xml"};
	}
}

⌨️ 快捷键说明

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