Update of /cvsroot/hibernate/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32558/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable Modified Files: SingleTableTest.java Added Files: PaperTrash.java Trash.java Log Message: ANN-223 generate disc value even for integers and raise an exception for chars ANN-240 inital work, need test and refinement for @Embeddable --- NEW FILE: PaperTrash.java --- //$Id: PaperTrash.java,v 1.1 2006/02/13 18:18:25 epbernard Exp $ package org.hibernate.test.annotations.inheritance.singletable; import javax.persistence.Entity; /** * @author Emmanuel Bernard */ @Entity public class PaperTrash extends Trash { } --- NEW FILE: Trash.java --- //$Id: Trash.java,v 1.1 2006/02/13 18:18:25 epbernard Exp $ package org.hibernate.test.annotations.inheritance.singletable; import javax.persistence.Entity; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; import javax.persistence.Id; import javax.persistence.GeneratedValue; /** * @author Emmanuel Bernard */ @Entity @DiscriminatorColumn(discriminatorType= DiscriminatorType.INTEGER) public class Trash { @Id @GeneratedValue private Integer id; } Index: SingleTableTest.java =================================================================== RCS file: /cvsroot/hibernate/HibernateExt/metadata/src/test/org/hibernate/test/annotations/inheritance/singletable/SingleTableTest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- SingleTableTest.java 4 Nov 2005 19:25:44 -0000 1.1 +++ SingleTableTest.java 13 Feb 2006 18:18:25 -0000 1.2 @@ -1,7 +1,11 @@ //$Id$ package org.hibernate.test.annotations.inheritance.singletable; +import java.util.List; + import org.hibernate.test.annotations.TestCase; +import org.hibernate.test.annotations.inheritance.Fruit; +import org.hibernate.test.annotations.inheritance.Apple; import org.hibernate.Session; import org.hibernate.Transaction; @@ -23,10 +27,77 @@ s.close(); } + public void testDefault() throws Exception { + Session s; + Transaction tx; + s = openSession(); + tx = s.beginTransaction(); + Fruit f = new Fruit(); + Apple a = new Apple(); + s.persist(f); + s.persist(a); + tx.commit(); + s.close(); + + s = openSession(); + tx = s.beginTransaction(); + assertEquals( 1, s.createQuery( "select count(*) from Fruit f where f.class = 'Apple'").uniqueResult() ); + List result = s.createCriteria(Fruit.class).list(); + assertNotNull(result); + assertEquals( 2, result.size() ); + Fruit f2 = (Fruit) result.get(0); + checkClassType(f2, f, a); + f2 = (Fruit) result.get(1); + checkClassType(f2, f, a); + s.delete( result.get(0) ); + s.delete( result.get(1) ); + tx.commit(); + s.close(); + } + + public void testDefaultIntegerDiscriminator() throws Exception { + Session s; + Transaction tx; + s = openSession(); + tx = s.beginTransaction(); + Trash t = new Trash(); + PaperTrash pt = new PaperTrash(); + s.persist(t); + s.persist(pt); + tx.commit(); + s.close(); + + s = openSession(); + tx = s.beginTransaction(); + assertEquals( 1, s.createQuery( "select count(*) from Trash f where f.class = :disc") + .setString( "disc", String.valueOf( "PaperTrash".hashCode() ) ).uniqueResult() ); + List result = s.createCriteria(Trash.class).list(); + assertNotNull(result); + s.delete( result.get(0) ); + s.delete( result.get(1) ); + tx.commit(); + s.close(); + } + + private void checkClassType(Fruit fruitToTest, Fruit f, Apple a) { + if ( fruitToTest.getId().equals( f.getId() ) ) { + assertFalse(fruitToTest instanceof Apple); + } else if ( fruitToTest.getId().equals( a.getId() ) ) { + assertTrue(fruitToTest instanceof Apple); + } else { + fail("Result does not contains the previously inserted elements"); + } + } + + protected Class[] getMappings() { return new Class[] { Building.class, - House.class + House.class, + Fruit.class, + Apple.class, + Trash.class, + PaperTrash.class }; } } |