2011-03-22 1 views
3

Comme nous le savons, en hibernation, configurez le générateur d'un id à "uuid", puis hibernate va générer automatiquement une valeur UUID au champ id lors de la sauvegarde d'un nouvel objet. Si vous configurez le générateur à "assigné", l'identifiant doit avoir une valeur avant de sauvegarder un objet.Attribuer manuellement la valeur à un UUID hibernate

Et j'ai trouvé que si la configuration du générateur à UUID et l'assignation de l'id une valeur manuellement, le hibernate va changer la valeur à un nouveau UUID.

Ma question est la suivante: lorsque le générateur est configuré en uuid, comment lui affecter manuellement une valeur? PS: J'utilise Spring HibernateDaoSupport pour sauvegarder.

org.springframework.orm.hibernate3.support.HibernateDaoSupport.save(Ojbect obj) 

Merci!

+1

Pourquoi avez-vous besoin de ça? – Bozho

+0

Le système AA crée, enregistre et envoie des messages et reçoit un message de réponse. Dans le processus, l'identifiant d'un message est utilisé comme indicateur de clé. Maintenant, il y a des messages du système BB que vous voulez ajouter dans AA, et recevez un message de réponse de AA. Afin de faire le moins de changements sur le système AA, j'ai besoin d'utiliser l'identifiant du système BB comme identifiant des messages dans le système AA. –

Répondre

8

Si vous n'en avez besoin que dans de rares cas particuliers, le plus simple est d'émettre des requêtes INSERT en SQL natif au lieu d'utiliser save().

Vous pouvez personnaliser le générateur pour obtenir le comportement souhaité:

public class FallbackUUIDHexGenerator extends UUIDHexGenerator { 
    private String entityName; 

    @Override 
    public void configure(Type type, Properties params, Dialect d) 
      throws MappingException { 
     entityName = params.getProperty(ENTITY_NAME); 
     super.configure(type, params, d); 
    } 

    @Override 
    public Serializable generate(SessionImplementor session, Object object) 
      throws HibernateException {    
     Serializable id = session 
      .getEntityPersister(entityName, object) 
      .getIdentifier(object, session);  

     if (id == null) 
      return super.generate(session, object); 
     else 
      return id; 
    } 
} 

et configurer Hibernate pour l'utiliser en définissant son nom complet comme strategy.

+0

je vous remercie pour le générateur personnalisé – nheid

Questions connexes