strategy references isessionfactory nhibernate tuplizer

references - nhibernate isessionfactory



Qué es Tuplizer en NHibernate (3)

Me encontré con una publicación que menciona Tuplizer en NHibernate, ¿alguien puede proporcionar una buena definición o referencia para Tuplizer?


Del código fuente de ITuplizer :

Un tuplizador define el contrato para las cosas que saben cómo administrar una representación particular de una pieza de datos, dado el EntityMode de la representación (el modo entidad que esencialmente define qué representación).

Si se considera que esa información dada es una estructura de datos, entonces un tuplizador es lo que sabe cómo:

  • crear dicha estructura de datos de manera apropiada
  • extraer valores de e inyectar valores en dicha estructura de datos

Por ejemplo, un dato dado puede representarse como una clase POCO. Aquí, su representación y entidad-modo es POCO. Bueno, un tuplizador para modos de entidad POCO sabría cómo:

  • crear la estructura de datos llamando al constructor de POCO
  • extraer e inyectar valores a través de getters / setter, o por acceso de campo directo, etc.

Ese mismo dato también podría representarse como una estructura DOM, utilizando el tuplizer asociado al XML entity-mode, que generaría instancias de XmlElement como estructura de datos y sabría cómo acceder a los valores como XmlElements anidados o como XmlAttributes.

En palabras de Fabio Maulo :

El tuplizer define cómo transformar un Property-Value a su representación persistente, y viceversa un Column-Value a su representación en memoria, y el EntityMode define qué tuplizer está en uso.

Algunas cosas que puedes hacer con tuplizadores personalizados:


org.hibernate.tuple.Tuplizer , y sus subinterfaces , son responsables de gestionar una representación particular de un dato dado el org.hibernate.EntityMode de esa representación. Si se considera que una determinada porción de datos es una estructura de datos, entonces un tuplizador es lo que sabe cómo crear dicha estructura de datos y cómo extraer valores e insertar valores en dicha estructura de datos. Por ejemplo, para el modo entidad POJO, el tuplizador correspondiente sabe cómo crear el POJO a través de su constructor. También sabe cómo acceder a las propiedades de POJO utilizando los descriptores de acceso de propiedad definidos. Hay dos tipos de Tuplizers de alto nivel, representados por las interfaces org.hibernate.tuple.entity.EntityTuplizer y org.hibernate.tuple.component.ComponentTuplizer . EntityTuplizers es responsable de administrar los contratos antes mencionados con respecto a las entidades, mientras que ComponentTuplizers hace lo mismo con los componentes.