2010-10-14 23 views
2

Selon la philosophie REST, une opération PUT devrait (extrait de Wikipedia):Est-il possible que NHibernate génère automatiquement un ID si l'entité n'en a pas, ou utilise l'ID de l'entité s'il en a déjà un?

PUT http://example.com/resources/142

Mise à jour l'élément d'adresse de la collection, ou si elle n'existe pas, créer il .

NHibernate semble avoir deux façons de traiter avec l'entité ID:

  1. Auto-Générez un ID, quelle que soit la valeur de l'ensemble des utilisateurs.
  2. Utilisez l'ID attribué par l'utilisateur, mais perdez toutes les fonctionnalités de génération automatique.

Le problème ici avec une opération PUT est la partie sur la création l'entité si elle n'existe pas. Mon hypothèse est que si vous PUT une ressource qui n'existe pas, il va le créer avec le même ID comme spécifié par l'URL (comme 142 si nous utilisons l'exemple ci-dessus). Cependant, NHibernate ne vous permet pas de définir l'ID s'il est généré automatiquement. Donc, ma question est la suivante: Y at-il un moyen pour que NHibernate génère automatiquement un ID si l'entité n'en a pas (ou a la valeur par défaut pour le type ID, par exemple 0 pour ints), mais aussi enregistrer l'entité avec l'ID que l'utilisateur a défini?

Répondre

1

Généralement c'est une mauvaise idée d'utiliser les identifiants assignés.

La situation que vous avez est plus proche de la chose appelée NaturalId. Tu devrais l'utiliser je pense. Vous aurez besoin de deux propriétés différentes, une pour la clé primaire des bases de données, et une seconde comme un identifiant visible par les utilisateurs.