Package org.apache.cayenne.reflect

## Class PersistentDescriptor

- java.lang.Object
- - org.apache.cayenne.reflect.PersistentDescriptor

- All Implemented Interfaces:
    `ClassDescriptor`

      public class PersistentDescriptor
      extends Object
      implements ClassDescriptor

  A default ClassDescriptor implementation for persistent objects.
  Since:
    3.0

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected Map<String,​DbEntity>` | `additionalDbEntities` |
    `protected Collection<ObjAttribute>` | `allDiscriminatorColumns` |
    `protected Map<String,​PropertyDescriptor>` | `declaredProperties` |
    `protected ObjEntity` | `entity` |
    `protected EntityInheritanceTree` | `entityInheritanceTree` |
    `protected Expression` | `entityQualifier` |
    `protected Collection<AttributeProperty>` | `idProperties` |
    `protected Collection<ArcProperty>` | `mapArcProperties` |
    `protected Class<?>` | `objectClass` |
    `protected Accessor` | `persistenceStateAccessor` |
    `protected Map<String,​PropertyDescriptor>` | `properties` |
    `protected Collection<DbEntity>` | `rootDbEntities` |
    `protected Map<String,​ClassDescriptor>` | `subclassDescriptors` |
    `protected ClassDescriptor` | `superclassDescriptor` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `PersistentDescriptor()` | Creates a PersistentDescriptor.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addDeclaredProperty​(PropertyDescriptor property)` | Registers a property.
    `void` | `addRootDbEntity​(DbEntity dbEntity)` | Adds a root DbEntity to the list of roots, filtering duplicates.
    `void` | `addSubclassDescriptor​(String className, ClassDescriptor subclassDescriptor)` | Adds a subclass descriptor that maps to a given class name.
    `void` | `addSuperProperty​(PropertyDescriptor property)` | Registers a superclass property.
    `Object` | `createObject()` | Creates a new instance of a class described by this object.
    `Map<String,​DbEntity>` | `getAdditionalDbEntities()` | Returns information about additional db entities that is used for this ObjEntity (i.e.
    `PropertyDescriptor` | `getDeclaredProperty​(String propertyName)` | Returns a Java Bean property descriptor matching property name or null if no such property is found.
    `Collection<ObjAttribute>` | `getDiscriminatorColumns()` | Returns a collection of ObjAttribute for the described class, its superclasses and subclasses, that participate in inheritance qualifier.
    `ObjEntity` | `getEntity()` | Returns an ObjEntity associated with this descriptor.
    `EntityInheritanceTree` | `getEntityInheritanceTree()` |
    `Expression` | `getEntityQualifier()` | Returns entity qualifier as a Cayenne expression that includes qualifiers for this entity and all subentities.
    `Collection<AttributeProperty>` | `getIdProperties()` | Returns a collection of the properties mapped to id columns.
    `Collection<ArcProperty>` | `getMapArcProperties()` | Returns a collection over the arc properties whose reverse arcs are to-many maps.
    `Class<?>` | `getObjectClass()` | Returns a class mapped by this descriptor.
    `PropertyDescriptor` | `getProperty​(String propertyName)` | Recursively looks up property descriptor in this class descriptor and all superclass descriptors.
    `Collection<DbEntity>` | `getRootDbEntities()` | Returns a collection of DbEntities that are the root tables for this descriptor's ObjEntity.
    `ClassDescriptor` | `getSubclassDescriptor​(Class<?> objectClass)` | Returns the most "specialized" descriptor for a given class.
    `ClassDescriptor` | `getSuperclassDescriptor()` | Returns a descriptor of the mapped superclass or null if the descriptor's entity sits at the top of inheritance hierarchy.
    `boolean` | `hasSubclasses()` | Returns whether this class has persistent subclasses.
    `void` | `injectValueHolders​(Object object)` | Invokes 'prepareForAccess' of a super descriptor and then invokes 'prepareForAccess' of each declared property.
    `boolean` | `isFault​(Object object)` | Returns true if an object is not fully resolved.
    `void` | `removeDeclaredProperty​(String propertyName)` | Removes declared property.
    `void` | `setDiscriminatorColumns​(Collection<ObjAttribute> columns)` |
    `void` | `setEntity​(ObjEntity entity)` |
    `void` | `setEntityInheritanceTree​(EntityInheritanceTree entityInheritanceTree)` |
    `void` | `setEntityQualifier​(Expression entityQualifier)` |
    `void` | `setPersistenceStateAccessor​(Accessor persistenceStateAccessor)` |
    `void` | `setSuperclassDescriptor​(ClassDescriptor superclassDescriptor)` |
    `void` | `shallowMerge​(Object from, Object to)` | Copies object properties from one object to another.
    `boolean` | `visitAllProperties​(PropertyVisitor visitor)` | Passes the visitor to the properties "visit" method for a combination of all properties, including properties declared in this descriptor, its super descriptors, and all subdescriptors.
    `boolean` | `visitDeclaredProperties​(PropertyVisitor visitor)` | Passes the visitor to the properties "visit" method for all properties declared in this descriptor.
    `boolean` | `visitProperties​(PropertyVisitor visitor)` | Passes the visitor to the properties "visit" method for all properties declared in this descriptor and all its super-decsriptors.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### superclassDescriptor

          protected ClassDescriptor superclassDescriptor

    - #### objectClass

          protected Class<?> objectClass

    - #### declaredProperties

          protected Map<String,​PropertyDescriptor> declaredProperties

    - #### properties

          protected Map<String,​PropertyDescriptor> properties

    - #### subclassDescriptors

          protected Map<String,​ClassDescriptor> subclassDescriptors

    - #### persistenceStateAccessor

          protected Accessor persistenceStateAccessor

    - #### entity

          protected ObjEntity entity

    - #### rootDbEntities

          protected Collection<DbEntity> rootDbEntities

    - #### additionalDbEntities

          protected Map<String,​DbEntity> additionalDbEntities

    - #### entityInheritanceTree

          protected EntityInheritanceTree entityInheritanceTree

    - #### idProperties

          protected Collection<AttributeProperty> idProperties

    - #### mapArcProperties

          protected Collection<ArcProperty> mapArcProperties

    - #### allDiscriminatorColumns

          protected Collection<ObjAttribute> allDiscriminatorColumns

    - #### entityQualifier

          protected Expression entityQualifier

  - ### Constructor Detail

    - #### PersistentDescriptor

          public PersistentDescriptor()

      Creates a PersistentDescriptor.

  - ### Method Detail

    - #### setDiscriminatorColumns

          public void setDiscriminatorColumns​(Collection<ObjAttribute> columns)

    - #### addSuperProperty

          public void addSuperProperty​(PropertyDescriptor property)

      Registers a superclass property.

    - #### addDeclaredProperty

          public void addDeclaredProperty​(PropertyDescriptor property)

      Registers a property. This method is useful to customize default ClassDescriptor generated from ObjEntity by adding new properties or overriding the standard ones.

    - #### addRootDbEntity

          public void addRootDbEntity​(DbEntity dbEntity)

      Adds a root DbEntity to the list of roots, filtering duplicates.

    - #### removeDeclaredProperty

          public void removeDeclaredProperty​(String propertyName)

      Removes declared property. This method can be used to customize default ClassDescriptor generated from ObjEntity.

    - #### addSubclassDescriptor

          public void addSubclassDescriptor​(String className,
                                            ClassDescriptor subclassDescriptor)

      Adds a subclass descriptor that maps to a given class name.

    - #### getEntity

          public ObjEntity getEntity()

      Description copied from interface: `ClassDescriptor`
      Returns an ObjEntity associated with this descriptor.
      Specified by:
        `getEntity` in interface `ClassDescriptor`

    - #### getRootDbEntities

          public Collection<DbEntity> getRootDbEntities()

      Description copied from interface: `ClassDescriptor`
      Returns a collection of DbEntities that are the root tables for this descriptor's ObjEntity. Usually such collection would contain only one entity, however in cases involving subclass horizontal inheritance, it will be more than one, and in cases of abstract entities with no subclasses, the collection will be empty.
      Specified by:
        `getRootDbEntities` in interface `ClassDescriptor`

    - #### getAdditionalDbEntities

          public Map<String,​DbEntity> getAdditionalDbEntities()

      Description copied from interface: `ClassDescriptor`
      Returns information about additional db entities that is used for this ObjEntity (i.e. for flattened attributes).

      Keys are full paths for corresponding flattened attributes.

      Specified by:
        `getAdditionalDbEntities` in interface `ClassDescriptor`
      Returns:
        information about additional db entities

    - #### isFault

          public boolean isFault​(Object object)

      Description copied from interface: `ClassDescriptor`
      Returns true if an object is not fully resolved.
      Specified by:
        `isFault` in interface `ClassDescriptor`

    - #### getObjectClass

          public Class<?> getObjectClass()

      Description copied from interface: `ClassDescriptor`
      Returns a class mapped by this descriptor.
      Specified by:
        `getObjectClass` in interface `ClassDescriptor`

    - #### getSubclassDescriptor

          public ClassDescriptor getSubclassDescriptor​(Class<?> objectClass)

      Description copied from interface: `ClassDescriptor`
      Returns the most "specialized" descriptor for a given class. This method assumes that the following is true:

           this.getObjectClass().isAssignableFrom(objectClass)

      Specified by:
        `getSubclassDescriptor` in interface `ClassDescriptor`

    - #### getDiscriminatorColumns

          public Collection<ObjAttribute> getDiscriminatorColumns()

      Description copied from interface: `ClassDescriptor`
      Returns a collection of ObjAttribute for the described class, its superclasses and subclasses, that participate in inheritance qualifier. If a discriminator expression specifies a DbAttribute instead of an ObjAttribute, a synthetic ObjAttribute is created and returned.
      Specified by:
        `getDiscriminatorColumns` in interface `ClassDescriptor`

    - #### getIdProperties

          public Collection<AttributeProperty> getIdProperties()

      Description copied from interface: `ClassDescriptor`
      Returns a collection of the properties mapped to id columns.
      Specified by:
        `getIdProperties` in interface `ClassDescriptor`

    - #### getMapArcProperties

          public Collection<ArcProperty> getMapArcProperties()

      Description copied from interface: `ClassDescriptor`
      Returns a collection over the arc properties whose reverse arcs are to-many maps. I.e. for each ArcProperty in returned collection, the following is true:

           arc.getComplimentaryReverseArc() instanceof ToManyMapProperty

      Specified by:
        `getMapArcProperties` in interface `ClassDescriptor`

    - #### getProperty

          public PropertyDescriptor getProperty​(String propertyName)

      Recursively looks up property descriptor in this class descriptor and all superclass descriptors.
      Specified by:
        `getProperty` in interface `ClassDescriptor`

    - #### getDeclaredProperty

          public PropertyDescriptor getDeclaredProperty​(String propertyName)

      Description copied from interface: `ClassDescriptor`
      Returns a Java Bean property descriptor matching property name or null if no such property is found. Lookup DOES NOT including properties from the superclass descriptors. Returned property can be any one of `AttributeProperty`, `ToManyProperty`, `ToOneProperty`.
      Specified by:
        `getDeclaredProperty` in interface `ClassDescriptor`

    - #### getSuperclassDescriptor

          public ClassDescriptor getSuperclassDescriptor()

      Returns a descriptor of the mapped superclass or null if the descriptor's entity sits at the top of inheritance hierarchy.
      Specified by:
        `getSuperclassDescriptor` in interface `ClassDescriptor`

    - #### createObject

          public Object createObject()

      Creates a new instance of a class described by this object.
      Specified by:
        `createObject` in interface `ClassDescriptor`

    - #### injectValueHolders

          public void injectValueHolders​(Object object)
                                  throws PropertyException

      Invokes 'prepareForAccess' of a super descriptor and then invokes 'prepareForAccess' of each declared property.
      Specified by:
        `injectValueHolders` in interface `ClassDescriptor`
      Throws:
        `PropertyException`

    - #### shallowMerge

          public void shallowMerge​(Object from,
                                   Object to)
                            throws PropertyException

      Copies object properties from one object to another. Invokes 'shallowCopy' of a super descriptor and then invokes 'shallowCopy' of each declared property.
      Specified by:
        `shallowMerge` in interface `ClassDescriptor`
      Throws:
        `PropertyException`

    - #### visitDeclaredProperties

          public boolean visitDeclaredProperties​(PropertyVisitor visitor)

      Description copied from interface: `ClassDescriptor`
      Passes the visitor to the properties "visit" method for all properties declared in this descriptor. This property set excludes inherited properties, even those that got overridden in this subclass. Walkthrough is terminated in case one of the properties returns false. Returns true if all visited properties returned true, false - if one property returned false.
      Specified by:
        `visitDeclaredProperties` in interface `ClassDescriptor`
      Since:
        3.0

    - #### visitAllProperties

          public boolean visitAllProperties​(PropertyVisitor visitor)

      Description copied from interface: `ClassDescriptor`
      Passes the visitor to the properties "visit" method for a combination of all properties, including properties declared in this descriptor, its super descriptors, and all subdescriptors. Walkthrough is terminated in case one of the properties returns false. Returns true if all visited properties returned true, false - if one property returned false.
      Specified by:
        `visitAllProperties` in interface `ClassDescriptor`
      Since:
        3.0

    - #### visitProperties

          public boolean visitProperties​(PropertyVisitor visitor)

      Description copied from interface: `ClassDescriptor`
      Passes the visitor to the properties "visit" method for all properties declared in this descriptor and all its super-decsriptors. Properties that are overridden in subdescriptors will include overridden information. Walkthrough is terminated in case one of the properties returns false. Returns true if all visited properties returned true, false - if one property returned false.
      Specified by:
        `visitProperties` in interface `ClassDescriptor`

    - #### setPersistenceStateAccessor

          public void setPersistenceStateAccessor​(Accessor persistenceStateAccessor)

    - #### setEntity

          public void setEntity​(ObjEntity entity)

    - #### setSuperclassDescriptor

          public void setSuperclassDescriptor​(ClassDescriptor superclassDescriptor)

    - #### getEntityQualifier

          public Expression getEntityQualifier()

      Description copied from interface: `ClassDescriptor`
      Returns entity qualifier as a Cayenne expression that includes qualifiers for this entity and all subentities.
      Specified by:
        `getEntityQualifier` in interface `ClassDescriptor`

    - #### setEntityQualifier

          public void setEntityQualifier​(Expression entityQualifier)

    - #### getEntityInheritanceTree

          public EntityInheritanceTree getEntityInheritanceTree()

      Specified by:
        `getEntityInheritanceTree` in interface `ClassDescriptor`

    - #### setEntityInheritanceTree

          public void setEntityInheritanceTree​(EntityInheritanceTree entityInheritanceTree)

    - #### hasSubclasses

          public boolean hasSubclasses()

      Description copied from interface: `ClassDescriptor`
      Returns whether this class has persistent subclasses.
      Specified by:
        `hasSubclasses` in interface `ClassDescriptor`