Hi,

I'm trying to debug/fix Hibernate messages like 
"org.hibernate.NonUniqueObjectException: a different object with the same 
identifier value was already associated with the session: "... and I find the 
default exception logging in AbstractSaveEventListener#performSave not 
sufficient. I've added some System.err.printlns() with the information I 
typically need. It would be great if this debug info would make it somehow into 
the latest SVN.

Rgds
Holger

        /**
         * Ppepares the save call by checking the session caches for a 
pre-existing
         * entity and performing any lifecycle callbacks.
         * @param entity The entity to be saved.
         * @param id The id by which to save the entity.
         * @param persister The entity's persister instance.
         * @param useIdentityColumn Is an identity column in use?
         * @param source The session from which the event originated.
         * @param requiresImmediateIdAccess does the event context require
         * access to the identifier immediately after execution of this method 
(if
         * not, post-insert style id generators may be postponed if we are 
outside
         * a transaction).
         * @return The id used to save the entity; may be null depending on the
         * type of id generator used and the requiresImmediateIdAccess value
         * @throws HibernateException
         */
        protected Serializable performSave(
                        Object entity,
                        Serializable id,
                        EntityPersister persister,
                        boolean useIdentityColumn,
                        Object anything,
                        EventSource source,
                boolean requiresImmediateIdAccess)
        throws HibernateException {

                if ( log.isTraceEnabled() ) {
                        log.trace( 
                                        "saving " + 
                                        MessageHelper.infoString( persister, 
id, source.getFactory() ) 
                                );
                }
                
                EntityKey key;
                if ( !useIdentityColumn ) {
                        key = new EntityKey( id, persister, 
source.getEntityMode() );
                        Object old = 
source.getPersistenceContext().getEntity(key);
                        if (old != null) {
                                if ( 
source.getPersistenceContext().getEntry(old).getStatus() == Status.DELETED ) {
                                        source.forceFlush( 
source.getPersistenceContext().getEntry(old) );
                                }
                                else {
                                        System.err.println("old: " + old);
                                        System.err.println("old.class: " + 
old.getClass());
                                        System.err.println("entity: " + entity);
                                        System.err.println("entity.class: " + 
entity.getClass());
                                        System.err.println("id: " + id);
                                        throw new NonUniqueObjectException( id, 
persister.getEntityName() );
                                }
                        }
                        persister.setIdentifier(entity, id, 
source.getEntityMode());
                }
                else {
                        key = null;
                }
                
                if ( invokeSaveLifecycle(entity, persister, source) ) {
                        return id; //EARLY EXIT
                }

                return performSaveOrReplicate(
                                entity, 
                                key, 
                                persister, 
                                useIdentityColumn, 
                                anything, 
                                source,
                        requiresImmediateIdAccess
                        );
        }

-- 


Echte DSL-Flatrate dauerhaft für 0,- Euro*!
"Feel free" mit GMX DSL! http://www.gmx.net/de/go/dsl

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
hibernate-devel mailing list
hibernate-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hibernate-devel

Reply via email to