]
Gail Badner resolved HHH-4810.
------------------------------
Resolution: Fixed
Fixed in trunk.
Now updates before deleting immutable and read-only entities only nullify references to
transient entities (which is necessary to avoid constraint violations). No other columns
are affected by these updates.
Persistent immutable and read-only entities are updated before being
deleted
----------------------------------------------------------------------------
Key: HHH-4810
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4810
Project: Hibernate Core
Issue Type: Bug
Components: core
Affects Versions: 3.5.0-Beta-3
Reporter: Gail Badner
Assignee: Gail Badner
Fix For: 3.5.0-CR-2
Read-only and immutable entities that are in persistent state when deleted are updated
before being deleted. Read-only and immutable entities that are detached when deleted are
not updated before being deleted.
In the following examples, Contract is an immutable class.
Example 1: Immutable entity is updated with the same property values as just read
s = openSession();
t = s.beginTransaction();
c = (Contract) s.get( Contract.class, c.getId() );
s.delete(c);
t.commit();
s.close();
Hibernate: update Contract set customerName=?, type=? where id=?
17:59:32,640 TRACE StringType:151 - binding 'gavin' to parameter: 1
17:59:32,640 TRACE StringType:151 - binding 'phone' to parameter: 2
17:59:32,641 TRACE LongType:151 - binding '1' to parameter: 3
... (immutable collection, Contract.getVariations() is also updated and deleted)
Hibernate: delete from Contract where id=?
17:59:32,654 TRACE LongType:151 - binding '1' to parameter: 1
-------------------------------------------------------------------------
Example 2: Immutable entity is updated with a new property value before being deleted
s = openSession();
t = s.beginTransaction();
c = (Contract) s.get( Contract.class, c.getId() );
c.setCustomerName( "Sherman" );
s.delete(c);
t.commit();
s.close();
Hibernate: update Contract set customerName=?, type=? where id=?
17:59:33,221 TRACE StringType:151 - binding 'Sherman' to parameter: 1
17:59:33,221 TRACE StringType:151 - binding 'phone' to parameter: 2
17:59:33,222 TRACE LongType:151 - binding '6' to parameter: 3
... (immutable collection, Contract.getVariations() is also updated and deleted)
Hibernate: delete from Contract where id=?
17:59:33,242 TRACE LongType:151 - binding '6' to parameter: 1
Example 3: No update when the immutable entity is detached when it is deleted.
s = openSession();
t = s.beginTransaction();
s.delete( c );
t.commit();
s.close();
... (immutable collection, Contract.getVariations() is deleted)
Hibernate: delete from Contract where id=?
17:59:33,337 TRACE LongType:151 - binding '8' to parameter: 1
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: