org.hibernate.tuple.Tuplizer
, et ses sous-interfaces, sont responsables de la gestion d'une représentation particulière d'un morceau de données, en fonction
du org.hibernate.EntityMode
de réprésentation. Si un morceau donné de données est pensé comme une structure de données, alors un tuplizer est la chose
qui sait comment créer une telle structure de données, comment extraire des valeurs et injecter des valeurs dans une telle
structure de données. Par exemple, pour le mode d'entité POJO, le tuplizer correspondant sait comment créer le POJO à travers
son constructeur et comment accéder aux propriétés du POJO utilisant les accesseurs de la propriété définie. Il y a deux types
de Tuplizers haut niveau, représenté par les interfaces org.hibernate.tuple.EntityTuplizer
et org.hibernate.tuple.ComponentTuplizer
. Les EntityTuplizer
s sont responsables de la gestion des contrats mentionnés ci-dessus pour les entités, alors que les ComponentTuplizer
s s'occupent des composants.
Les utilisateurs peuvent aussi brancher leurs propres tuplizers. Peut-être vous est-il nécessaire qu'une implémentation de
java.util.Map
autre que java.util.HashMap
soit utilisée dans le mode d'entité dynamic-map ; ou peut-être avez-vous besoin de définir une statégie de génération de
proxy différente de celle utilisée par défaut. Les deux devraient être effectuées en définissant une implémentation de tuplizer
utilisateur. Les définitions de tuplizers sont attachées au mapping de l'entité ou du composant qu'ils sont censés gérer.
Retour à l'exemple de notre entité utilisateur :
<hibernate-mapping> <class entity-name="Customer"> <!-- Override the dynamic-map entity-mode tuplizer for the customer entity --> <tuplizer entity-mode="dynamic-map" class="CustomMapTuplizerImpl"/> <id name="id" type="long" column="ID"> <generator class="sequence"/> </id> <!-- other properties --> ... </class> </hibernate-mapping> public class CustomMapTuplizerImpl extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer { // override the buildInstantiator() method to plug in our custom map... protected final Instantiator buildInstantiator( org.hibernate.mapping.PersistentClass mappingInfo) { return new CustomMapInstantiator( mappingInfo ); } private static final class CustomMapInstantiator extends org.hibernate.tuple.DynamicMapInstantitor { // override the generateMap() method to return our custom map... protected final Map generateMap() { return new CustomMap(); } } }