From: <hib...@li...> - 2006-08-04 18:25:22
|
Author: ste...@jb... Date: 2006-08-04 14:25:19 -0400 (Fri, 04 Aug 2006) New Revision: 10220 Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/JoinedSubclassTest.java branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/Person.hbm.xml branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/Person.java Log: HHH-1848 : locking on versioned joined subclasses Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java =================================================================== --- branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java 2006-08-04 18:24:33 UTC (rev 10219) +++ branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java 2006-08-04 18:25:19 UTC (rev 10220) @@ -219,7 +219,9 @@ jk--; pc = pc.getSuperclass(); } - if (jk!=-1) throw new AssertionFailure("Tablespan does not match height of joined-subclass hiearchy."); + if ( jk != -1 ) { + throw new AssertionFailure( "Tablespan does not match height of joined-subclass hiearchy." ); + } // PROPERTIES @@ -452,7 +454,9 @@ private static int getTableId(String tableName, String[] tables) { for ( int j=0; j<tables.length; j++ ) { - if ( tableName.equals( tables[j] ) ) return j; + if ( tableName.equals( tables[j] ) ) { + return j; + } } throw new AssertionFailure("Table " + tableName + " not found"); } @@ -554,7 +558,9 @@ public String getPropertyTableName(String propertyName) { Integer index = getEntityMetamodel().getPropertyIndexOrNull(propertyName); - if (index==null) return null; + if ( index == null ) { + return null; + } return tableNames[ propertyTableNumbers[ index.intValue() ] ]; } @@ -565,4 +571,8 @@ public String[][] getContraintOrderedTableKeyColumnClosure() { return constraintOrderedKeyColumnNames; } + + public String getRootTableName() { + return naturalOrderTableNames[0]; + } } Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/JoinedSubclassTest.java =================================================================== --- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/JoinedSubclassTest.java 2006-08-04 18:24:33 UTC (rev 10219) +++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/JoinedSubclassTest.java 2006-08-04 18:25:19 UTC (rev 10220) @@ -11,6 +11,7 @@ import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.Transaction; +import org.hibernate.LockMode; import org.hibernate.criterion.Expression; import org.hibernate.criterion.Property; import org.hibernate.dialect.DB2Dialect; @@ -141,6 +142,33 @@ s.close(); } + public void testLockingJoinedSubclass() { + Session s = openSession(); + Transaction t = s.beginTransaction(); + Person p = new Person(); + p.setName("Emmanuel"); + p.setSex('M'); + s.persist(p); + Employee q = new Employee(); + q.setName("Steve"); + q.setSex('M'); + q.setTitle("Mr"); + q.setSalary( new BigDecimal(1000) ); + s.persist(q); + t.commit(); + s.close(); + + s = openSession(); + t = s.beginTransaction(); + s.lock( p, LockMode.UPGRADE ); + s.lock( q, LockMode.UPGRADE ); + s.delete( p ); + s.delete( q ); + t.commit(); + s.close(); + + } + protected String[] getMappings() { return new String[] { "joinedsubclass/Person.hbm.xml" }; Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/Person.hbm.xml =================================================================== --- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/Person.hbm.xml 2006-08-04 18:24:33 UTC (rev 10219) +++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/Person.hbm.xml 2006-08-04 18:25:19 UTC (rev 10220) @@ -26,8 +26,10 @@ unsaved-value="0"> <generator class="native"/> </id> - - <property name="name" + + <version name="version" column="version" type="int"/> + + <property name="name" not-null="true" length="80"/> <property name="sex" Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/Person.java =================================================================== --- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/Person.java 2006-08-04 18:24:33 UTC (rev 10219) +++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/joinedsubclass/Person.java 2006-08-04 18:25:19 UTC (rev 10220) @@ -9,6 +9,7 @@ private long id; private String name; private char sex; + private int version; private Address address = new Address(); /** * @return Returns the address. @@ -67,4 +68,11 @@ this.name = identity; } + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } } |