Puis-je avoir Hibernate créer un object par la méthode de l’usine?

Existe-t-il un moyen de mapper une méthode d’usine dans Hibernate (par opposition à ce qu’Hibernate appelle un constructeur par défaut et définisse de manière réfléchie les propriétés ou les champs)?

Et s’il ne peut pas être mappé, Hibernate fournit-il un point d’accroche pour la création d’object personnalisé classe par classe?

Merci!

Ceci est faisable en utilisant soit:

  • une implémentation EntityPersister personnalisée (que vous pouvez enregistrer pour une entité particulière lors de l’initialisation d’Hibernate à l’aide d’une Configuration personnalisée ) ~ ou ~
  • un Interceptor personnalisé implémentant la méthode Interceptor.instantiate()

Je pense que l’approche Interceptor est plus facile. Voici le javadoc de l’ Interceptor.instantiate() :

 /** * Instantiate the entity class. Return null to indicate that Hibernate should use * the default constructor of the class. The identifier property of the returned instance * should be initialized with the given identifier. * * @param entityName the name of the entity * @param entityMode The type of entity instance to be returned. * @param id the identifier of the new instance * @return an instance of the class, or null to choose default behaviour */ public Object instantiate(Ssortingng entityName, EntityMode entityMode, Serializable id) throws CallbackException; 

Jetez un coup d’œil à UserType . Vous devrez cependant appeler votre usine dans nullSafeGet () et renseigner vous-même tous les champs. Le travail inverse est effectué dans nullSafeSet ().

Et s’il ne peut pas être mappé, Hibernate fournit-il un point d’accroche pour la création d’object personnalisé classe par classe?

Découvrez les auditeurs d’entité. Ceux-ci ajoutent simplement les annotations qui vous aideront. Pensez @PrePersist ou @PostLoad.

Voir Transactions Hibernate et Spring – utilisation de méthodes de constructeurs privés / de fabriques statiques , mais pas de solution pour éviter la partie “Propriétés ou champs définis de manière réfléchie”.

Je ne sais pas si j’ai bien compris ce que vous demandez, mais je pense qu’une solution est décrite ici (voir la solution 4 – Intercepteur Hibernate, méthode onLoad): “Conception gérée par le domaine avec Spring et Hibernate” http: // http://www.jblewitt.com/blog/?p=129