2011-01-23 2 views
0

j'obtenu le mappage suivant:un à un et en spécifiant la colonne

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false"> 
    <class name="Gate.Users.User, Gate.Models" table="users"> 
    <id name="Id" column="id"> 
     <generator class="sequence"> 
     <param name="sequence">users_id_seq</param> 
     </generator> 
    </id> 
    <one-to-one class="Gate.Extensions.Extension, Gate.Models" foreign-key="extension_id" name="Extension" /> 
    </class> 
</hibernate-mapping> 

Tables (pseudo):

table users 
(
    id primary key 
    extension_id int 
) 

table extensions 
(
    id primary key 
    address varchar(40) 
) 

Mon problème est que les utilisations NHibernate users.id au lieu de users.extension_id lors de l'extraction de l'extension. Mon mappage est-il incorrect?

Mise à jour

j'ai changé pour un many-to-one liant, et maintenant il fonctionne. Je suppose que j'ai dû mal comprendre comment one-to-one est utilisé?

Répondre

1

Ces tables sont disposées comme plusieurs-à-un. (Pour plus d'un utilisateur, le même numéro d'extension peut être identique)

Pour une un-à-un, vous n'avez besoin que de la colonne id dans le tableau de l'utilisateur (sur les deux que vous avez posté) et elle doit avoir la même valeur que colonne id dans la table des extensions, de cette façon, il est vraiment imposé que vous ne pouvez avoir qu'une seule extension pour chaque utilisateur et vice-versa. Si vous souhaitez vraiment conserver des clés séparées, vous pouvez utiliser l'attribut name pour spécifier la propriété extensionId de votre objet User et l'attribut property-ref pour spécifier l'ID de l'objet Extension. Here's a blog post on it.

+0

Il existe une vraie relation 1-1. Eh bien, presque. 'Extension' peut être utilisé par différents types et il y a une colonne identifiant le type auquel il est associé. Un objet ne peut avoir qu'une extension et une extension peut également être associée à un objet. D'où le placement de l'ID dans la table d'extension. – jgauffin

Questions connexes