2011-03-14 6 views
4

nHibernate에 상당히 익숙하지 않습니다. 두 개의 테이블 "User"와 "UserProfile"사이에 다음 일대일 매핑을 설정했습니다."주어진 키가 사전에 존재하지 않습니다."nHibernate C#

User.hbm.xml :

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

    <class name="User" table="Users" dynamic-update="true" lazy="false"> 
    <cache usage="read-write"/> 
    <id name="UserId" column="UserId" type="guid"> 
    </id> 
    <one-to-one name="UserProfile" class="UserProfile"/> 
    </class> 
</hibernate-mapping> 

UserProfile.hbm.xml :

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Core.Domain.Model" assembly="Core"> 
<class name="UserProfile" table="UserProfiles" dynamic-update="true" lazy="false"> 
    <cache usage="read-write"/> 
    <id name="UserProfileId" column="UserProfileId" type="int"> 
     <generator class="native"/> 
    </id> 
    <property name="Description" length="100"/> 
    <many-to-one name="User" unique="true" column="UserId"/> 
    </class> 
</hibernate-mapping> 

내 포항 강판 위의 매핑은을 위해 : 이제

public class User 
    { 
     public virtual Guid UserId { get; set; } 
     public virtual UserProfile UserProfile { get; set; } 

    } 

public class UserProfile 
    { 
     public virtual int UserProfileId { get; set; } 
     public virtual User User { get; set; } 
    } 

내가하려고 할 때 내 "사용자"개체 유지 예외가 발생했습니다 : "주어진 키가 없습니다. 다음 줄에 사전 "에서 :

using (ISession session = SessionFactory.OpenSession()) 

사람이 여기에 갈 수 있는지 알고 있나요?

+0

생각하기에 전에이 오류를 보았습니다. 앱을 다시 빌드하고 다시 실행 해보세요. 던져진 첫 번째 예외가 무엇인지 확인하십시오. – jjnguy

+0

복용량이 지속되는 코드로 표시 할 수 있습니까? –

+0

그냥 했어요. 같은 예외가 throw됩니다. – kartikq

답변

4

내 테스트 프로젝트에 hbm 매핑과 클래스를 복사했습니다. SessionFactory를 생성 할 때 오류가 발생했습니다. SessionFactory를 사용 문에서 처음 액세스 할 때 SessionFactory를 생성 할 가능성이 있습니까? 그렇다면, 다음이 희망으로 문제를 해결할 수 :

은 내가 USERPROFILE 클래스에

public virtual String Description { get; set; } 

를 추가하여 해결했습니다. 코드에이 코드를 복사하고 복사 중에 & 붙여 넣기를하는 동안 잊어 버린 경우, 더 자세히 조사하겠습니다.

편집 :

이 오류의 또 다른 가능한 소스 - here을 발견 :

모든 .hbm.xml 파일이 포함 된 리소스 있는지 확인하십시오.

그래도 여전히 도움이되지 않는 경우 예외의 StackTrace를 게시 해주세요.

+0

아, 그래, 그거야. 복사 - 실수로 붙여 넣기. 그 점을 지적 해 주셔서 감사합니다. – kartikq

+0

@ kartikq이 답변으로 도움이 되었다면, 왜 그 대답을 선택한 대답으로 선택하지 않았습니까? 아니면 적어도 투표에 참여하지 않았습니까? –

+0

@Ilya 죄송합니다. Upvoted! – kartikq

0

오류는 모호합니다.

내 경우에는 조건이 있지만 동적으로 생성 된 HQL 문의 누락 되었기 때문에 where 절이 누락되었습니다. 이다

이의 잘못 생성 된 HQL이 어딘가에 쿼리를 구축하는 체인

from User u 
    left join u.Profile 
    (id = :id) 

같은했다, 누락 where 조항이 있었다. 이되도록 :

from User u 
    left join u.Profile 
    where (id = :id) 
0

같은 문제가 있었다! 나에게 그것은 kerzek이 말한 것과 같았습니다. 일대일 다른 칼럼 이름으로 참조되었습니다.나는 constrained = "false"를 1 대 1 매핑에 추가했습니다.

<one-to-one name="Person" class="PersonClass" cascade="none" constrained="false" fetch="join"/> 
관련 문제