Author: athimel Date: 2014-05-12 11:31:21 +0200 (Mon, 12 May 2014) New Revision: 707 Url: http://forge.nuiton.org/projects/sandbox/repository/revisions/707 Log: Code review Modified: hibernate-list-idx-bug/ hibernate-list-idx-bug/pom.xml hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Building.java hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Flat.java hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Loft.java hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Building.hbm.xml hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Flat.hbm.xml hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Loft.hbm.xml hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Suite.hbm.xml hibernate-list-idx-bug/src/test/java/org/nuiton/entities/AppTest.java hibernate-list-idx-bug/src/test/resources/hibernate.cfg.xml Property changes on: hibernate-list-idx-bug ___________________________________________________________________ Modified: svn:ignore - target .idea + target .idea *.iml Modified: hibernate-list-idx-bug/pom.xml =================================================================== --- hibernate-list-idx-bug/pom.xml 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/pom.xml 2014-05-12 09:31:21 UTC (rev 707) @@ -2,142 +2,146 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> + <modelVersion>4.0.0</modelVersion> - <!-- ************************************************************* --> - <!-- *** POM Relationships *************************************** --> - <!-- ************************************************************* --> + <!-- ************************************************************* --> + <!-- *** POM Relationships *************************************** --> + <!-- ************************************************************* --> - <parent> - <groupId>org.nuiton</groupId> - <artifactId>mavenpom</artifactId> - <version>3.4.9</version> - </parent> - + <parent> <groupId>org.nuiton</groupId> - <artifactId>test</artifactId> - <version>0.1-SNAPSHOT</version> + <artifactId>mavenpom</artifactId> + <version>3.4.9</version> + </parent> - <!-- ************************************************************* --> - <!-- *** Project Information ************************************* --> - <!-- ************************************************************* --> + <groupId>org.nuiton</groupId> + <artifactId>test</artifactId> + <version>0.1-SNAPSHOT</version> - <name>Test case for bug on Hibernate union-subclass</name> - <inceptionYear>2014</inceptionYear> + <!-- ************************************************************* --> + <!-- *** Project Information ************************************* --> + <!-- ************************************************************* --> - <licenses> - <license> - <name>Lesser General Public License (LGPL) v 3.0</name> - <url>http://www.gnu.org/licenses/lgpl-3.0.txt</url> - <distribution>repo</distribution> - </license> - </licenses> + <name>Test case for bug on Hibernate union-subclass</name> + <inceptionYear>2014</inceptionYear> - <developers> + <licenses> + <license> + <name>Lesser General Public License (LGPL) v 3.0</name> + <url>http://www.gnu.org/licenses/lgpl-3.0.txt</url> + <distribution>repo</distribution> + </license> + </licenses> - <developer> - <name>Arnaud Thimel</name> - <id>athimel</id> - <email>thimel@codelutin.com</email> - <organization>Code Lutin</organization> - <timezone>+2</timezone> - <roles> - <role>developer</role> - </roles> - </developer> + <developers> - <developer> - <name>David Cossé</name> - <id>cosse</id> - <email>cosse@codelutin.com</email> - <organization>Code Lutin</organization> - <timezone>+2</timezone> - <roles> - <role>developer</role> - </roles> - </developer> + <developer> + <name>David Cossé</name> + <id>cosse</id> + <email>cosse@codelutin.com</email> + <organization>Code Lutin</organization> + <timezone>+2</timezone> + <roles> + <role>developer</role> + </roles> + </developer> - </developers> + <developer> + <name>Arnaud Thimel</name> + <id>athimel</id> + <email>thimel@codelutin.com</email> + <organization>Code Lutin</organization> + <timezone>+2</timezone> + <roles> + <role>developer</role> + </roles> + </developer> - <organization> - <name>Code Lutin</name> - <url>http://www.codelutin.com/</url> - </organization> + </developers> - <!-- ************************************************************* --> - <!-- *** Build Environment ************************************** --> - <!-- ************************************************************* --> + <organization> + <name>Code Lutin</name> + <url>http://www.codelutin.com/</url> + </organization> - <issueManagement/> - <ciManagement/> - <mailingLists/> - <scm/> + <!-- ************************************************************* --> + <!-- *** Build Environment ************************************** --> + <!-- ************************************************************* --> - <!-- ************************************************************* --> - <!-- *** Build Settings ****************************************** --> - <!-- ************************************************************* --> + <issueManagement/> + <ciManagement/> + <mailingLists/> + <scm/> - <properties> - <license.licenseName>lgpl_v3</license.licenseName> + <!-- ************************************************************* --> + <!-- *** Build Settings ****************************************** --> + <!-- ************************************************************* --> - <h2Version>1.4.177</h2Version> + <properties> + <license.licenseName>lgpl_v3</license.licenseName> - <hibernateVersion>4.3.5.Final</hibernateVersion> - </properties> + <h2Version>1.4.177</h2Version> - <packaging>jar</packaging> + <hibernateVersion>4.3.5.Final</hibernateVersion> + <slf4jVersion>1.7.6</slf4jVersion> + <junitVersion>4.11</junitVersion> + </properties> - <dependencies> + <packaging>jar</packaging> - <!-- Hibernate --> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-core</artifactId> - <version>${hibernateVersion}</version> - </dependency> + <dependencies> - <!-- Other libraries --> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-simple</artifactId> - <version>1.7.6</version> - </dependency> + <!-- Hibernate --> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-core</artifactId> + <version>${hibernateVersion}</version> + </dependency> - <!-- Tests --> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - </dependency> + <!-- Other libraries --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>${slf4jVersion}</version> + </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <version>${h2Version}</version> - <scope>test</scope> - </dependency> + <!-- Tests --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>${junitVersion}</version> + <scope>test</scope> + </dependency> - </dependencies> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <version>${h2Version}</version> + <scope>test</scope> + </dependency> - <repositories/> + </dependencies> - <build> - <resources/> - <extensions/> - <plugins/> - </build> + <repositories/> - <reporting/> + <build> + <resources/> + <extensions/> + <plugins/> + </build> - <!-- ************************************************************* --> - <!-- *** Maven Environment *************************************** --> - <!-- ************************************************************* --> + <reporting/> - <prerequisites> - <maven>3.0</maven> - </prerequisites> + <!-- ************************************************************* --> + <!-- *** Maven Environment *************************************** --> + <!-- ************************************************************* --> - <distributionManagement/> - <profiles/> + <prerequisites> + <maven>3.0</maven> + </prerequisites> + <distributionManagement/> + <profiles/> + </project> Modified: hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Building.java =================================================================== --- hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Building.java 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Building.java 2014-05-12 09:31:21 UTC (rev 707) @@ -24,10 +24,6 @@ * #L% */ -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.OneToMany; import java.io.Serializable; import java.util.List; @@ -65,4 +61,5 @@ public void setFlats(List<Flat> flats) { this.flats = flats; } + } Modified: hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Flat.java =================================================================== --- hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Flat.java 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Flat.java 2014-05-12 09:31:21 UTC (rev 707) @@ -29,7 +29,7 @@ /** * Created by davidcosse on 16/04/14. */ -public abstract class Flat implements Serializable{ +public abstract class Flat implements Serializable { protected Long flatId; Modified: hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Loft.java =================================================================== --- hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Loft.java 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/src/main/java/org/nuiton/entities/Loft.java 2014-05-12 09:31:21 UTC (rev 707) @@ -23,6 +23,7 @@ * <http://www.gnu.org/licenses/lgpl-3.0.html>. * #L% */ + import java.io.Serializable; /** @@ -30,7 +31,6 @@ */ public class Loft extends Flat implements Serializable { - //@hibernate.union-subclass protected String name; public String getName() { Modified: hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Building.hbm.xml =================================================================== --- hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Building.hbm.xml 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Building.hbm.xml 2014-05-12 09:31:21 UTC (rev 707) @@ -27,15 +27,21 @@ xsi:schemaLocation="http://www.hibernate.org/xsd/hibernate-mapping classpath://org/hibernate/hibernate-mapping-4.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" default-access="field" auto-import="true" package="org.nuiton.entities"> - <class name="org.nuiton.entities.Building" abstract="false" > + + <class name="org.nuiton.entities.Building" abstract="false"> + <id name="buildingId" type="long"> <generator class="increment"/> </id> + <property name="name" access="field" type="text" column="name"/> + <list name="flats" lazy="true" cascade="all,delete-orphan"> <key column="building"/> <list-index column="building_idx"/> <one-to-many class="org.nuiton.entities.Flat"/> </list> + </class> -</hibernate-mapping> \ No newline at end of file + +</hibernate-mapping> Modified: hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Flat.hbm.xml =================================================================== --- hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Flat.hbm.xml 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Flat.hbm.xml 2014-05-12 09:31:21 UTC (rev 707) @@ -27,10 +27,13 @@ xsi:schemaLocation="http://www.hibernate.org/xsd/hibernate-mapping classpath://org/hibernate/hibernate-mapping-4.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" default-access="field" auto-import="true" package="org.nuiton.entities"> + <class name="org.nuiton.entities.Flat" abstract="true"> + <id name="flatId" type="long"> <generator class="increment"/> </id> </class> -</hibernate-mapping> \ No newline at end of file + +</hibernate-mapping> Modified: hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Loft.hbm.xml =================================================================== --- hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Loft.hbm.xml 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Loft.hbm.xml 2014-05-12 09:31:21 UTC (rev 707) @@ -27,7 +27,11 @@ xsi:schemaLocation="http://www.hibernate.org/xsd/hibernate-mapping classpath://org/hibernate/hibernate-mapping-4.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" default-access="field" auto-import="true" package="org.nuiton.entities"> + <union-subclass name="org.nuiton.entities.Loft" extends="org.nuiton.entities.Flat" abstract="false"> + <property name="name" access="field" type="text" column="name"/> + </union-subclass> -</hibernate-mapping> \ No newline at end of file + +</hibernate-mapping> Modified: hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Suite.hbm.xml =================================================================== --- hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Suite.hbm.xml 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/src/main/resources/org/nuiton/entities/Suite.hbm.xml 2014-05-12 09:31:21 UTC (rev 707) @@ -27,7 +27,11 @@ xsi:schemaLocation="http://www.hibernate.org/xsd/hibernate-mapping classpath://org/hibernate/hibernate-mapping-4.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" default-access="field" auto-import="true" package="fr.inra.agrosyst.api.entities.measure"> - <union-subclass name="org.nuiton.entities.Suite" extends="org.nuiton.entities.Flat" abstract="false" > + + <union-subclass name="org.nuiton.entities.Suite" extends="org.nuiton.entities.Flat" abstract="false"> + <property name="name" access="field" type="text" column="name"/> + </union-subclass> -</hibernate-mapping> \ No newline at end of file + +</hibernate-mapping> Modified: hibernate-list-idx-bug/src/test/java/org/nuiton/entities/AppTest.java =================================================================== --- hibernate-list-idx-bug/src/test/java/org/nuiton/entities/AppTest.java 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/src/test/java/org/nuiton/entities/AppTest.java 2014-05-12 09:31:21 UTC (rev 707) @@ -22,65 +22,82 @@ * #L% */ +import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; -import org.junit.Assert; +import org.junit.After; +import org.junit.Before; import org.junit.Test; -import javax.persistence.PersistenceException; import java.util.ArrayList; import java.util.List; public class AppTest { - @Test - public void test() { + protected Session session; + @Before + public void beforeTest() { + + // Create a session Configuration configuration = new Configuration(); configuration.configure(); StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder(); ServiceRegistry serviceRegistry = serviceRegistryBuilder.applySettings( configuration.getProperties()).build(); SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); - org.hibernate.Session session = sessionFactory.openSession(); + session = sessionFactory.openSession(); - Loft loft = new Loft(); - loft.setName("L-A"); + } - // Create and persist a suite instance + @After + public void afterTest() { + session.close(); + } + + @Test + public void test() { + + // Start transaction Transaction tx = session.beginTransaction(); + + // Create and persist a loft + Loft loft = new Loft(); + loft.setName("Some loft"); Long loftKey = (Long) session.save(loft); - System.out.println("loftKey:" + loftKey); + System.out.println("Created loft with id:" + loftKey); + // Create and persist a suite Suite suite = new Suite(); - suite.setName("S-A"); + suite.setName("Some suite"); + Long suiteKey = (Long) session.save(suite); + System.out.println("Created suite with id:" + suiteKey); - // Create and persist a suite instance - Long suiteKey = (Long) session.save(suite); - System.out.println("suiteKey:" + suiteKey); + // Commit transaction and start a new one tx.commit(); tx = session.beginTransaction(); + // Create a building and add both flat and suite Building building = new Building(); - building.setName("B-A"); - List<Flat> flats = new ArrayList(); + building.setName("Building"); + List<Flat> flats = new ArrayList<Flat>(); building.setFlats(flats); flats.add(loft); flats.add(suite); Long buildingKey = (Long) session.save(building); - System.out.println("buildingKey:" + buildingKey); + System.out.println("Created bulding with id:" + buildingKey); - try { - tx.commit(); - Assert.fail("Failed but should not"); - } catch (PersistenceException pe) { - session.close(); - } + // Persisting the building's flat list will fail + tx.commit(); + // The test fails during commit with an incoherent SQL query : "update Flat set building=?, building_idx=? where flatId=?" + // The query is not correct because according to inheritance strategy, table Flat does not exist + // Exception is :org.h2.jdbc.JdbcSQLException: Table "FLAT" not found; SQL statement: + } } Modified: hibernate-list-idx-bug/src/test/resources/hibernate.cfg.xml =================================================================== --- hibernate-list-idx-bug/src/test/resources/hibernate.cfg.xml 2014-04-24 08:17:45 UTC (rev 706) +++ hibernate-list-idx-bug/src/test/resources/hibernate.cfg.xml 2014-05-12 09:31:21 UTC (rev 707) @@ -28,6 +28,7 @@ "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> + <session-factory> <!-- Database connection settings --> @@ -47,5 +48,5 @@ <mapping resource="org/nuiton/entities/Suite.hbm.xml"/> </session-factory> + </hibernate-configuration> -