I have a problem where an update is being generated when I'm doing a find().
Hibernate 2.1.1
SQLServer 2000
Debug level log
Code:
DEBUG [xxx.ServerConnectionManager] [User: quilleashm] (ServerConnectionManager.java:171) - Method request: ServerCore.executeHQL( java.lang.String:from CalculusToolbar c order by c.CtbIndex, java.lang.Integer:-1 )
DEBUG [xxx.ServerCore] [User: quilleashm] (ServerCore.java:192) - executeHQL(): from CalculusToolbar c order by c.CtbIndex
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:528) - opened session
DEBUG [net.sf.hibernate.transaction.JDBCTransaction] [User: quilleashm] (JDBCTransaction.java:37) - begin
DEBUG [net.sf.hibernate.transaction.JDBCTransaction] [User: quilleashm] (JDBCTransaction.java:41) - current autocommit status:false
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:1460) - find: from CalculusToolbar c order by c.CtbIndex
DEBUG [net.sf.hibernate.hql.QueryTranslator] [User: quilleashm] (QueryTranslator.java:147) - compiling query
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2193) - flushing session
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2321) - Flushing entities and processing referenced collections
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2664) - Processing unreferenced collections
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2678) - Scheduling collection removes/(re)creates/updates
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2217) - Flushed: 0 insertions, 0 updates, 0 deletions to 0 objects
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2222) - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:1745) - Dont need to execute flush
DEBUG [net.sf.hibernate.hql.QueryTranslator] [User: quilleashm] (QueryTranslator.java:199) - HQL: from xxx.database.hibernate.mappings.CalculusToolbar c order by c.CtbIndex
DEBUG [net.sf.hibernate.hql.QueryTranslator] [User: quilleashm] (QueryTranslator.java:200) - SQL: select calculusto0_.ctb_id as ctb_id, calculusto0_.ctb_version_id as ctb_vers2_, calculusto0_.ctb_created_dttm as ctb_crea3_, calculusto0_.ctb_created_csu_id as ctb_crea4_, calculusto0_.ctb_modified_dttm as ctb_modi5_, calculusto0_.ctb_modified_csu_id as ctb_modi6_, calculusto0_.ctb_delete_fl as ctb_dele7_, calculusto0_.ctb_name as ctb_name, calculusto0_.ctb_display_name as ctb_disp9_, calculusto0_.ctb_index as ctb_index, calculusto0_.ctb_icon_idx as ctb_ico11_ from calculus_toolbar calculusto0_ order by calculusto0_.ctb_index
DEBUG [net.sf.hibernate.impl.BatcherImpl] [User: quilleashm] (BatcherImpl.java:192) - about to open: 0 open PreparedStatements, 0 open ResultSets
DEBUG [net.sf.hibernate.SQL] [User: quilleashm] (BatcherImpl.java:223) - select calculusto0_.ctb_id as ctb_id, calculusto0_.ctb_version_id as ctb_vers2_, calculusto0_.ctb_created_dttm as ctb_crea3_, calculusto0_.ctb_created_csu_id as ctb_crea4_, calculusto0_.ctb_modified_dttm as ctb_modi5_, calculusto0_.ctb_modified_csu_id as ctb_modi6_, calculusto0_.ctb_delete_fl as ctb_dele7_, calculusto0_.ctb_name as ctb_name, calculusto0_.ctb_display_name as ctb_disp9_, calculusto0_.ctb_index as ctb_index, calculusto0_.ctb_icon_idx as ctb_ico11_ from calculus_toolbar calculusto0_ order by calculusto0_.ctb_index
Hibernate: select calculusto0_.ctb_id as ctb_id, calculusto0_.ctb_version_id as ctb_vers2_, calculusto0_.ctb_created_dttm as ctb_crea3_, calculusto0_.ctb_created_csu_id as ctb_crea4_, calculusto0_.ctb_modified_dttm as ctb_modi5_, calculusto0_.ctb_modified_csu_id as ctb_modi6_, calculusto0_.ctb_delete_fl as ctb_dele7_, calculusto0_.ctb_name as ctb_name, calculusto0_.ctb_display_name as ctb_disp9_, calculusto0_.ctb_index as ctb_index, calculusto0_.ctb_icon_idx as ctb_ico11_ from calculus_toolbar calculusto0_ order by calculusto0_.ctb_index
DEBUG [net.sf.hibernate.impl.BatcherImpl] [User: quilleashm] (BatcherImpl.java:227) - preparing statement
DEBUG [net.sf.hibernate.loader.Loader] [User: quilleashm] (Loader.java:196) - processing result set
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:68) - returning '1' as column: ctb_id
DEBUG [net.sf.hibernate.loader.Loader] [User: quilleashm] (Loader.java:404) - result row: 1
DEBUG [net.sf.hibernate.loader.Loader] [User: quilleashm] (Loader.java:535) - Initializing object from ResultSet: 1
DEBUG [net.sf.hibernate.loader.Loader] [User: quilleashm] (Loader.java:604) - Hydrating entity: xxx.database.hibernate.mappings.CalculusToolbar#1
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:68) - returning '7' as column: ctb_vers2_
DEBUG [net.sf.hibernate.type.TimestampType] [User: quilleashm] (NullableType.java:68) - returning '01 January 2004 00:00:00' as column: ctb_crea3_
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:68) - returning '1' as column: ctb_crea4_
DEBUG [net.sf.hibernate.type.TimestampType] [User: quilleashm] (NullableType.java:68) - returning '13 April 2004 14:48:41' as column: ctb_modi5_
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:68) - returning '1' as column: ctb_modi6_
DEBUG [net.sf.hibernate.type.YesNoType] [User: quilleashm] (NullableType.java:68) - returning 'false' as column: ctb_dele7_
DEBUG [net.sf.hibernate.type.StringType] [User: quilleashm] (NullableType.java:68) - returning 'Search' as column: ctb_name
DEBUG [net.sf.hibernate.type.StringType] [User: quilleashm] (NullableType.java:68) - returning 'Search' as column: ctb_disp9_
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:68) - returning '0' as column: ctb_index
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:64) - returning null as column: ctb_ico11_
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:1837) - Version: 7
DEBUG [net.sf.hibernate.loader.Loader] [User: quilleashm] (Loader.java:225) - done processing result set (1 rows)
DEBUG [net.sf.hibernate.impl.BatcherImpl] [User: quilleashm] (BatcherImpl.java:199) - done closing: 0 open PreparedStatements, 0 open ResultSets
DEBUG [net.sf.hibernate.impl.BatcherImpl] [User: quilleashm] (BatcherImpl.java:240) - closing statement
DEBUG [net.sf.hibernate.loader.Loader] [User: quilleashm] (Loader.java:238) - total objects hydrated: 1
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2129) - resolving associations for [xxx.database.hibernate.mappings.CalculusToolbar#1]
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:3746) - collection not cached
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2153) - done materializing entity [xxx.database.hibernate.mappings.CalculusToolbar#1]
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:3000) - initializing non-lazy collections
DEBUG [net.sf.hibernate.transaction.JDBCTransaction] [User: quilleashm] (JDBCTransaction.java:59) - commit
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2193) - flushing session
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2321) - Flushing entities and processing referenced collections
DEBUG [net.sf.hibernate.persister.AbstractEntityPersister] [User: quilleashm] (AbstractEntityPersister.java:278) - xxx.database.hibernate.mappings.CalculusToolbar.CalculusToolbarItems is dirty
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2415) - Updating entity: [xxx.database.hibernate.mappings.CalculusToolbar#1]
DEBUG [net.sf.hibernate.persister.AbstractEntityPersister] [User: quilleashm] (AbstractEntityPersister.java:278) - xxx.database.hibernate.mappings.CalculusToolbar.ModifiedDttm is dirty
DEBUG [net.sf.hibernate.persister.AbstractEntityPersister] [User: quilleashm] (AbstractEntityPersister.java:278) - xxx.database.hibernate.mappings.CalculusToolbar.CalculusToolbarItems is dirty
DEBUG [net.sf.hibernate.engine.Versioning] [User: quilleashm] (Versioning.java:26) - Incrementing: 7 to 8
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2664) - Processing unreferenced collections
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2785) - Collection dereferenced: [xxx.database.hibernate.mappings.CalculusToolbar.CalculusToolbarItems#1]
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2678) - Scheduling collection removes/(re)creates/updates
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2217) - Flushed: 0 insertions, 1 updates, 0 deletions to 1 objects
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2222) - Flushed: 0 (re)creations, 0 updates, 1 removals to 1 collections
DEBUG [net.sf.hibernate.impl.Printer] [User: quilleashm] (Printer.java:75) - listing entities:
DEBUG [net.sf.hibernate.impl.Printer] [User: quilleashm] (Printer.java:82) - xxx.database.hibernate.mappings.CalculusToolbar{CtbIconIdx=-2147483648, ModifiedCsuId=1, ModifiedDttm=Tue Apr 13 14:56:36 BST 2004, CtbId=1, CtbDisplayName=Search, CtbName=Search, VersionId=8, DeleteFl=false, CtbIndex=0, CreatedDttm=Thu Jan 01 00:00:00 GMT 2004, CreatedCsuId=1, CalculusToolbarItems=null}
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2258) - executing flush
DEBUG [net.sf.hibernate.persister.EntityPersister] [User: quilleashm] (EntityPersister.java:631) - Updating entity: [xxx.database.hibernate.mappings.CalculusToolbar#1]
DEBUG [net.sf.hibernate.persister.EntityPersister] [User: quilleashm] (EntityPersister.java:632) - Existing version: 7 -> New version: 8
DEBUG [net.sf.hibernate.impl.BatcherImpl] [User: quilleashm] (BatcherImpl.java:192) - about to open: 0 open PreparedStatements, 0 open ResultSets
DEBUG [net.sf.hibernate.SQL] [User: quilleashm] (BatcherImpl.java:223) - update calculus_toolbar set ctb_version_id=?, ctb_modified_dttm=?, ctb_modified_csu_id=?, ctb_delete_fl=?, ctb_name=?, ctb_display_name=?, ctb_index=?, ctb_icon_idx=? where ctb_id=? and ctb_version_id=?
Hibernate: update calculus_toolbar set ctb_version_id=?, ctb_modified_dttm=?, ctb_modified_csu_id=?, ctb_delete_fl=?, ctb_name=?, ctb_display_name=?, ctb_index=?, ctb_icon_idx=? where ctb_id=? and ctb_version_id=?
DEBUG [net.sf.hibernate.impl.BatcherImpl] [User: quilleashm] (BatcherImpl.java:227) - preparing statement
DEBUG [net.sf.hibernate.persister.EntityPersister] [User: quilleashm] (EntityPersister.java:389) - Dehydrating entity: [xxx.database.hibernate.mappings.CalculusToolbar#1]
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:46) - binding '8' to parameter: 1
DEBUG [net.sf.hibernate.type.TimestampType] [User: quilleashm] (NullableType.java:46) - binding '13 April 2004 14:56:36' to parameter: 2
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:46) - binding '1' to parameter: 3
DEBUG [net.sf.hibernate.type.YesNoType] [User: quilleashm] (NullableType.java:46) - binding 'false' to parameter: 4
DEBUG [net.sf.hibernate.type.StringType] [User: quilleashm] (NullableType.java:46) - binding 'Search' to parameter: 5
DEBUG [net.sf.hibernate.type.StringType] [User: quilleashm] (NullableType.java:46) - binding 'Search' to parameter: 6
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:46) - binding '0' to parameter: 7
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:41) - binding null to parameter: 8
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:46) - binding '1' to parameter: 9
DEBUG [net.sf.hibernate.type.IntegerType] [User: quilleashm] (NullableType.java:46) - binding '7' to parameter: 10
DEBUG [net.sf.hibernate.impl.BatcherImpl] [User: quilleashm] (BatcherImpl.java:199) - done closing: 0 open PreparedStatements, 0 open ResultSets
DEBUG [net.sf.hibernate.impl.BatcherImpl] [User: quilleashm] (BatcherImpl.java:240) - closing statement
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:2708) - post flush
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:558) - transaction completion
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:546) - closing session
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:3187) - disconnecting session
DEBUG [net.sf.hibernate.impl.SessionImpl] [User: quilleashm] (SessionImpl.java:558) - transaction completion
Relevant mappings
Code:
<class name="CalculusToolbar" table="calculus_toolbar" lazy="true" >
<id name="CtbId" type="int" column="ctb_id" unsaved-value="null" >
<generator class="assigned" />
</id>
<version name="VersionId" column="ctb_version_id" type="int" />
<property name="CreatedDttm" column="ctb_created_dttm" type="com.anitecalculus.database.hibernate.type.DateTimeType" update="false" not-null="true" />
<property name="CreatedCsuId" column="ctb_created_csu_id" type="int" update="false" not-null="true" />
<property name="ModifiedDttm" column="ctb_modified_dttm" type="com.anitecalculus.database.hibernate.type.DateTimeType" not-null="true" />
<property name="ModifiedCsuId" column="ctb_modified_csu_id" type="int" not-null="true" />
<property name="DeleteFl" column="ctb_delete_fl" type="yes_no" not-null="true" />
<property name="CtbName" column="ctb_name" type="string" not-null="true" />
<property name="CtbDisplayName" column="ctb_display_name" type="string" not-null="true" />
<property name="CtbIndex" column="ctb_index" type="int" not-null="true" />
<property name="CtbIconIdx" column="ctb_icon_idx" type="com.anitecalculus.database.hibernate.type.NullIntType" not-null="false" />
<set name="CalculusToolbarItems" lazy="true" inverse="true" >
<key column="ctb_id"/>
<one-to-many class="CalculusToolbarItem"/>
</set>
</class>
<class name="CalculusToolbarItem" table="calculus_toolbar_item" lazy="true" >
<id name="CtiId" type="int" column="cti_id" unsaved-value="null" >
<generator class="assigned" />
</id>
<version name="VersionId" column="cti_version_id" type="int" />
<property name="CreatedDttm" column="cti_created_dttm" type="com.anitecalculus.database.hibernate.type.DateTimeType" update="false" not-null="true" />
<property name="CreatedCsuId" column="cti_created_csu_id" type="int" update="false" not-null="true" />
<property name="ModifiedDttm" column="cti_modified_dttm" type="com.anitecalculus.database.hibernate.type.DateTimeType" not-null="true" />
<property name="ModifiedCsuId" column="cti_modified_csu_id" type="int" not-null="true" />
<property name="DeleteFl" column="cti_delete_fl" type="yes_no" not-null="true" />
<property name="CsrId" column="csr_id" type="com.anitecalculus.database.hibernate.type.NullIntType" not-null="false" />
<property name="CtbId" column="ctb_id" type="int" not-null="true" />
<property name="CtiName" column="cti_name" type="string" not-null="true" />
<property name="CtiDisplayName" column="cti_display_name" type="string" not-null="true" />
<property name="CtiIndex" column="cti_index" type="int" not-null="true" />
<property name="CtiIconIdx" column="cti_icon_idx" type="com.anitecalculus.database.hibernate.type.NullIntType" not-null="false" />
</class>
And the Java code. Wrapped in an open session and transaction open then after a transaction commit and session close.
Code:
// Run either the straight query or a row-limited one
if (maxResultsF == -1)
return session.find(queryStringF);
else
{
Query q = session.createQuery(queryStringF);
q.setMaxResults(maxResultsF);
return q.list();
}
The problem seems to be that somewhere along the way the CalculusToolbarItems set get's dirtied and causes the update. Is this supposed to happen or am I doing something wrong.
I am using an Interceptor to update Modified fields on each db row which also gets dirtied along the way because onFlushDirty gets called. I don't know whether this is contributing.
Any help appreciated.
Cheers.
Myk.