Class ReflectiveObjectPersister

  • All Implemented Interfaces:
    ObjectPersister

    @Deprecated
    public class ReflectiveObjectPersister
    extends AbstractObjectPersister
    implements ObjectPersister
    Deprecated.
    since 7.17.0
    Uses Hibernate metadata to persist imported objects. This code is a direct port of the old import code that was scattered between ReverseDatabinder and poorly factored helper classes. Hopefully, though, it is a lot easier to understand encapsulated here.

    Limitations: the ReflectiveObjectPersister is NOT generic enough to persist anything you throw at it. It makes assumptions about the objects that are true of most Confluence hibernate objects: including the presence of an ID of type Long. Types that the reflective persister can not handle will need their own specific persister, for example PropertySetItemPersister.

    • Field Detail

      • log

        public static final org.slf4j.Logger log
        Deprecated.
    • Method Detail

      • persist

        public List<TransientHibernateHandle> persist​(ImportProcessorContext context,
                                                      ImportedObject importedObject)
                                               throws Exception
        Deprecated.
        Description copied from interface: ObjectPersister
        Persist a given imported object.
        Specified by:
        persist in interface ObjectPersister
        Parameters:
        context - the context of the current import operation
        importedObject - the object to save.
        Returns:
        a list of handles of the objects that were saved. If IDs are being rewritten on import, this list should still contain the pre-rewriting ID as it appears in the backup file
        Throws:
        Exception - if something goes wrong. To avoid duplication of "wrap everything in one exception type" code in every persister, it is assumed wrapping happens at a higher level.
      • unproxyIfRequired

        public static Object unproxyIfRequired​(Object object)
                                        throws org.hibernate.HibernateException
        Deprecated.
        When an object is retrieved from a Hibernate session, due to its lazy loading strategy, the object is possibly a proxy object. When net.sf.hibernate.metadata.ClassMetadata#setPropertyValue(Object target, String property, Object value) is called but the target object is a proxy object. Then, the new value cannot be persisted to database. This method aims to turn a proxy object to a real object so any update (if happens) can be persisted to database.
        Parameters:
        object - an object got from a Hibernate session, this object is either a real object or a proxy object.
        Returns:
        a real object of the input object
        Throws:
        org.hibernate.HibernateException