Class PojoEntityTuplizer

java.lang.Object
org.hibernate.tuple.entity.AbstractEntityTuplizer
org.hibernate.tuple.entity.PojoEntityTuplizer
All Implemented Interfaces:
EntityTuplizer, Tuplizer

public class PojoEntityTuplizer extends AbstractEntityTuplizer
An EntityTuplizer specific to the pojo entity mode.
  • Constructor Details

  • Method Details

    • buildProxyFactory

      protected ProxyFactory buildProxyFactory(PersistentClass persistentClass, Getter idGetter, Setter idSetter)
      Build an appropriate ProxyFactory for the given mapped entity.
      Specified by:
      buildProxyFactory in class AbstractEntityTuplizer
      Parameters:
      persistentClass - The mapping information regarding the mapped entity.
      idGetter - The constructed Getter relating to the entity's id property.
      idSetter - The constructed Setter relating to the entity's id property.
      Returns:
      An appropriate ProxyFactory instance.
    • buildProxyFactoryInternal

      protected ProxyFactory buildProxyFactoryInternal(PersistentClass persistentClass, Getter idGetter, Setter idSetter)
    • buildInstantiator

      protected Instantiator buildInstantiator(PersistentClass persistentClass)
      Build an appropriate Instantiator for the given mapped entity.
      Specified by:
      buildInstantiator in class AbstractEntityTuplizer
      Parameters:
      persistentClass - The mapping information regarding the mapped entity.
      Returns:
      An appropriate Instantiator instance.
    • setPropertyValues

      public void setPropertyValues(Object entity, Object[] values) throws HibernateException
      Inject the given values into the given entity.
      Specified by:
      setPropertyValues in interface Tuplizer
      Overrides:
      setPropertyValues in class AbstractEntityTuplizer
      Parameters:
      entity - The entity.
      values - The values to be injected.
      Throws:
      HibernateException
    • getPropertyValues

      public Object[] getPropertyValues(Object entity) throws HibernateException
      Extract the current values contained on the given entity.
      Specified by:
      getPropertyValues in interface Tuplizer
      Overrides:
      getPropertyValues in class AbstractEntityTuplizer
      Parameters:
      entity - The entity from which to extract values.
      Returns:
      The current property values.
      Throws:
      HibernateException
    • getPropertyValuesToInsert

      public Object[] getPropertyValuesToInsert(Object entity, Map mergeMap, SessionImplementor session) throws HibernateException
      Extract the values of the insertable properties of the entity (including backrefs)
      Specified by:
      getPropertyValuesToInsert in interface EntityTuplizer
      Overrides:
      getPropertyValuesToInsert in class AbstractEntityTuplizer
      Parameters:
      entity - The entity from which to extract.
      mergeMap - a map of instances being merged to merged instances
      session - The session in which the resuest is being made.
      Returns:
      The insertable property values.
      Throws:
      HibernateException
    • setPropertyValuesWithOptimizer

      protected void setPropertyValuesWithOptimizer(Object object, Object[] values)
    • getPropertyValuesWithOptimizer

      protected Object[] getPropertyValuesWithOptimizer(Object object)
    • getEntityMode

      public EntityMode getEntityMode()
      Return the entity-mode handled by this tuplizer instance.
      Returns:
      The entity-mode
    • getMappedClass

      public Class getMappedClass()
      Return the pojo class managed by this tuplizer.

      Need to determine how to best handle this for the Tuplizers for EntityModes other than POJO.

      todo : be really nice to not have this here since it is essentially pojo specific...
      Returns:
      The persistent class.
    • isLifecycleImplementor

      public boolean isLifecycleImplementor()
      Does the class managed by this tuplizer implement the Lifecycle interface.
      Specified by:
      isLifecycleImplementor in interface EntityTuplizer
      Overrides:
      isLifecycleImplementor in class AbstractEntityTuplizer
      Returns:
      True if the Lifecycle interface is implemented; false otherwise.
    • isValidatableImplementor

      public boolean isValidatableImplementor()
      Does the class managed by this tuplizer implement the Validatable interface.
      Specified by:
      isValidatableImplementor in interface EntityTuplizer
      Overrides:
      isValidatableImplementor in class AbstractEntityTuplizer
      Returns:
      True if the Validatable interface is implemented; false otherwise.
    • buildPropertyGetter

      protected Getter buildPropertyGetter(Property mappedProperty, PersistentClass mappedEntity)
      Build an appropriate Getter for the given property.
      Specified by:
      buildPropertyGetter in class AbstractEntityTuplizer
      Parameters:
      mappedProperty - The property to be accessed via the built Getter.
      mappedEntity - The entity information regarding the mapped entity owning this property.
      Returns:
      An appropriate Getter instance.
    • buildPropertySetter

      protected Setter buildPropertySetter(Property mappedProperty, PersistentClass mappedEntity)
      Build an appropriate Setter for the given property.
      Specified by:
      buildPropertySetter in class AbstractEntityTuplizer
      Parameters:
      mappedProperty - The property to be accessed via the built Setter.
      mappedEntity - The entity information regarding the mapped entity owning this property.
      Returns:
      An appropriate Setter instance.
    • getConcreteProxyClass

      public Class getConcreteProxyClass()
      Returns the java class to which generated proxies will be typed.

      todo : look at fully encapsulating PersistenceContext.narrowProxy(java.lang.Object, org.hibernate.persister.entity.EntityPersister, org.hibernate.engine.EntityKey, java.lang.Object) here, since that is the only external use of this method

      Returns:
      The java class to which generated proxies will be typed
    • afterInitialize

      public void afterInitialize(Object entity, boolean lazyPropertiesAreUnfetched, SessionImplementor session)
      Called just after the entities properties have been initialized.
      Specified by:
      afterInitialize in interface EntityTuplizer
      Overrides:
      afterInitialize in class AbstractEntityTuplizer
      Parameters:
      entity - The entity being initialized.
      lazyPropertiesAreUnfetched - Are defined lazy properties currently unfecthed
      session - The session initializing this entity.
    • hasUninitializedLazyProperties

      public boolean hasUninitializedLazyProperties(Object entity)
      Does the given entity instance have any currently uninitialized lazy properties?
      Specified by:
      hasUninitializedLazyProperties in interface EntityTuplizer
      Overrides:
      hasUninitializedLazyProperties in class AbstractEntityTuplizer
      Parameters:
      entity - The entity to be check for uninitialized lazy properties.
      Returns:
      True if uninitialized lazy properties were found; false otherwise.
    • isInstrumented

      public boolean isInstrumented()
      Is it an instrumented POJO?
    • determineConcreteSubclassEntityName

      public String determineConcreteSubclassEntityName(Object entityInstance, SessionFactoryImplementor factory)
      Given an entity instance, determine the most appropriate (most targeted) entity-name which represents it. This is called in situations where we already know an entity name for the given entityInstance; we are being asked to determine if there is a more appropriate entity-name to use, specifically within an inheritence hierarchy.

      For example, consider a case where a user calls session.update( "Animal", cat );. Here, the user has explicitly provided Animal as the entity-name. However, they have passed in an instance of Cat which is a subclass of Animal. In this case, we would return Cat as the entity-name.

      null may be returned from calls to this method. The meaining of null in that case is assumed to be that we should use whatever explicit entity-name the user provided (Animal rather than Cat in the example above).

      Parameters:
      entityInstance - The entity instance.
      factory - Reference to the SessionFactory.
      Returns:
      The most appropriate entity name to use.
    • getEntityNameResolvers

      public EntityNameResolver[] getEntityNameResolvers()
      Get any EntityNameResolvers associated with this Tuplizer.
      Returns:
      The associated resolvers. May be null or empty.