[
http://opensource.atlassian.com/projects/hibernate/browse/HV-281?page=com...
]
Vladimir Klyushnikov commented on HV-281:
-----------------------------------------
Hi,
I was struggling with this issue all past day. Bad news that this is behaviour by design
and it is used to merge entities with collections of other entities that use assigned
identifiers (IMHO). But it leads to really annoying problems. First is the issue that is
mentioned in description and the second is that merging transient entity with collection
executes INSERT and subsequent UPDATE of same entity. I use auditing of my entity and
don't need this update.
Good news that I've found a simple workaround. It will work only with generated IDs
and it is ok for me. I've developed a custom merge listener and registered it:
{code}
public class CollectionHandlingMergeEventListener extends DefaultMergeEventListener {
@Override
protected void copyValues(EntityPersister persister, Object entity,
Object target, SessionImplementor source,
Map copyCache, ForeignKeyDirection foreignKeyDirection) {
if (foreignKeyDirection != ForeignKeyDirection.FOREIGN_KEY_TO_PARENT) {
Object[] copiedValues = TypeFactory.replace(
persister.getPropertyValues(entity, source.getEntityMode()),
persister.getPropertyValues(target, source.getEntityMode()),
persister.getPropertyTypes(),
source,
target,
copyCache
);
persister.setPropertyValues(target, copiedValues, source.getEntityMode());
}
}
}
{code}
Of course, it is a hack. Hope core contributors will find a better way to solve these
issues.
validation of a persisted map
-----------------------------
Key: HV-281
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HV-281
Project: Hibernate Validator
Issue Type: Bug
Environment: hibernate-core 3.5.0-Beta-3
Validator 4.0.1.GA
MySQL 5.1
Reporter: thogau
Attachments: mapValidation.zip
Hi,
I am trying to validate an entity that holds a Map<K, V> of other persisted
entities (just checking wether the map holds some predefined values).
I can validate it "by hand" using validator.validate() and my map is correctly
filled at validation time
However when validation framework is called by persistence callbacks, my map is always
empty...
I am using Validator 4.0.1.GA and hibernate-core 3.5.0-Beta-2
I tryed to pinpoint the problem and it seems that the map is not touched in the following
method of AbstractType during the merge :
{code}
public Object replace(
Object original, Object target, SessionImplementor session,
Object owner, Map copyCache, ForeignKeyDirection foreignKeyDirection) throws
HibernateException {
boolean include;
if ( isAssociationType() ) {
AssociationType atype = (AssociationType) this;
include = atype.getForeignKeyDirection()==foreignKeyDirection;
}
else {
include = ForeignKeyDirection.FOREIGN_KEY_FROM_PARENT==foreignKeyDirection;
}
return include ? replace(original, target, session, owner, copyCache) : target;
}
{code}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira