2011-04-28 2 views
1

안녕하세요 여러분,이 문제에 대한 해결책을 일정 기간 검색하려고했습니다. 그것을 찾을 수 없습니다. 나는 두 가지 수업을 단순화 할 것입니다. 내 문제는 플레이어와 클랜 간의 단방향 일대일 매핑을 원한다는 것이다. 이제 나는 이드의 외래 키를 가진 예제를 보았습니다. 그러나 나는 그것을 이해하지 못한다. 이 매핑은 ClanLeader에 대한 내 Clans 테이블의 열을 생성하지 않습니다 ... 뭔가 빠졌습니까? 모두에게 도움을 주셔서 감사합니다.Nhibernate 일대일 매핑

public class Clan{ 
     private Int32 id; 

       public virtual Int32 Id 
       { 
        get { return id; } 
        set { id = value; } 
       } 

      private string name; 

      public virtual string Name 
       { 
        get { return name; } 
        set { name = value; } 
       } 

       private Player clanLeader; 

       public virtual Player ClanLeader 
       { 
        get { return clanLeader; } 
        set { clanLeader = value; } 
       } 
    } 

그런 다음 우리는 클랜에 대한 매핑이 : 플레이어에 대한

public class Player{ 
private Int32 id; 

       public virtual Int32 Id 
       { 
        get { return id; } 
        set { id = value; } 
       } 

      private string nickname; 

      public virtual string Nickname 
       { 
        get { return name; } 
        set { name = value; } 
       } 

} 

및 매핑 :

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateSQLite" 
        namespace="NHibernateSQLite" > 

    <class name="GamingOrganizerDomainModel.Clan, GamingOrganizerDomainModel" table="Clans" lazy="false"> 

    <id name="id" access="field" column="Clan_ID" type="Int32"> 
     <generator class="native"></generator> 
    </id> 
    <property name="Name" column="Clan_Name" unique-key="ClanNameConstraint" type="String"/> 


    <one-to-one name="ClanLeader" class="GamingOrganizerDomainModel.Player, GamingOrganizerDomainModel" /> 

    </class> 
</hibernate-mapping> 

다음 클래스 플레이어입니다

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateSQLite" 
        namespace="NHibernateSQLite" > 

    <class name="GamingOrganizerDomainModel.Player, GamingOrganizerDomainModel" table="Players" lazy="false"> 

    <id name="id" column="Player_ID" access="field" type="Int32"> 
     <generator class="native" /> 
    </id> 

    <property name="nickname" access="field" column="Nickname"/> 
</class> 
</hibernate-mapping> 

답변

1

단방향 1 대 1 관계는 "다 대일"요소로 매핑되어야합니다. "일대일"은 양방향 일대일로 사용됩니다. 자세한 내용은 post을 참조하십시오. HORSHORM은 물론 ConfORM 매핑도 있으며,이 문서는 매우 명료합니다. 당신은지도에 조립 클래스 이름을 작성할 필요가 없습니다

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="GamingOrganizerDomainModel" 
        namespace="GamingOrganizerDomainModel" > 

    <class name="Clan" table="Clans" lazy="false"> 
     <id name="id" access="field" column="Clan_ID" type="Int32"> 
      <generator class="native"></generator> 
     </id> 
     <property name="Name" column="Clan_Name" unique-key="ClanNameConstraint" type="String"/> 

     <many-to-one name="ClanLeader" class="Player" /> 
    </class> 

:

당신은 당신의 클랜 매핑에 하나의 변경이 필요합니다. hibernate-mapping 요소의 어셈블리와 네임 스페이스 속성은 NH가 특정 클래스를 찾으려고 할 때 기본 네임 스페이스와 어셈블리를 지정한다.

+0

대단히 감사합니다. 이것은 내 문제를 해결했습니다! – Romulus

+0

이 대답이 도움이 된 것을 기쁘게 생각합니다. 이 qustion을 대답으로 표시하십시오 :). –