From: <one...@pr...> - 2002-11-18 11:43:33
|
Update of /cvsroot/hibernate/Hibernate/cirrus/hibernate/persister In directory sc8-pr-cvs1:/tmp/cvs-serv27704/hibernate/persister Modified Files: MultiTableEntityPersister.java Log Message: fixed problem with class that declares no properties Index: MultiTableEntityPersister.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/persister/MultiTableEntityPersister.java,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** MultiTableEntityPersister.java 16 Nov 2002 13:26:22 -0000 1.29 --- MultiTableEntityPersister.java 18 Nov 2002 11:43:30 -0000 1.30 *************** *** 25,29 **** import java.sql.SQLException; import java.util.ArrayList; - import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; --- 25,28 ---- *************** *** 82,85 **** --- 81,85 ---- private transient final int[] propertyColumnSpans; private transient final int[] propertyTables; + private transient final boolean[] hasColumns; private transient final String[][] propertyColumnNames; private transient final String[][] propertyColumnNameAliases; *************** *** 97,101 **** private transient final Type[] subclassPropertyTypeClosure; private transient final Class[] subclassClosure; - private transient final boolean hasColumns; private transient final HashMap tableNumberByPropertyPath = new HashMap(); --- 97,100 ---- *************** *** 462,465 **** --- 461,465 ---- String[] result = new String[ tableNames.length ]; for ( int j=0; j<tableNames.length; j++ ) { + boolean hasColumns = false; StringBuffer setters = new StringBuffer(20); for (int i=0; i<propertyColumnNames.length; i++) { *************** *** 467,487 **** for ( int k=0; k<propertyColumnNames[i].length; k++ ) setters.append( propertyColumnNames[i][k] ).append(" = ?, "); } } ! setters.setLength( setters.length()-2 ); //trim last comma ! StringBuffer buf = new StringBuffer(100) ! .append("update ") ! .append( tableNames[j] ) ! .append(" set ") ! .append( setters.toString() ) ! .append(" where ") ! .append( StringHelper.join( " = ? and ", tableKeyColumns[j] ) ) //TODO:refactor out copied code ! .append(" = ?"); ! if ( isVersioned() && j==0 ) { ! buf.append(" and ") ! .append(versionColumnName) ! .append(" = ?"); } - result[j] = buf.toString(); } return result; --- 467,493 ---- for ( int k=0; k<propertyColumnNames[i].length; k++ ) setters.append( propertyColumnNames[i][k] ).append(" = ?, "); + hasColumns = true; } } ! if (!hasColumns) { ! result[j]=null; ! } ! else { ! setters.setLength( setters.length()-2 ); //trim last comma ! StringBuffer buf = new StringBuffer(100) ! .append("update ") ! .append( tableNames[j] ) ! .append(" set ") ! .append( setters.toString() ) ! .append(" where ") ! .append( StringHelper.join( " = ? and ", tableKeyColumns[j] ) ) //TODO:refactor out copied code ! .append(" = ?"); ! if ( isVersioned() && j==0 ) { ! buf.append(" and ") ! .append(versionColumnName) ! .append(" = ?"); ! } ! result[j] = buf.toString(); } } return result; *************** *** 757,769 **** public void update(Serializable id, Object[] fields, int[] dirtyFields, Object oldVersion, Object object, SessionImplementor session) throws SQLException, HibernateException { - if (!hasColumns) return; // for objects that came in via update() - int tables = tableNames.length; ! boolean[] tableUpdateNeeded = new boolean[tables]; if (dirtyFields==null) { ! Arrays.fill(tableUpdateNeeded, true); // for objects that came in via update() } else { for ( int i=0; i<dirtyFields.length; i++ ) { tableUpdateNeeded[ propertyTables[ dirtyFields[i] ] ] = true; --- 763,774 ---- public void update(Serializable id, Object[] fields, int[] dirtyFields, Object oldVersion, Object object, SessionImplementor session) throws SQLException, HibernateException { int tables = tableNames.length; ! boolean[] tableUpdateNeeded; if (dirtyFields==null) { ! tableUpdateNeeded = hasColumns; // for objects that came in via update() } else { + tableUpdateNeeded = new boolean[tables]; for ( int i=0; i<dirtyFields.length; i++ ) { tableUpdateNeeded[ propertyTables[ dirtyFields[i] ] ] = true; *************** *** 1126,1130 **** } ! hasColumns = columnNames.length!=0; } --- 1131,1138 ---- } ! hasColumns = new boolean[updateStrings.length]; ! for ( int m=0; m<updateStrings.length; m++ ) { ! hasColumns[m] = updateStrings[m]!=null; ! } } |