Ayende의 게시물 here에 설명 된대로 내 응용 프로그램에서 상속을위한 테이블 당 하위 클래스 전략을 사용합니다.서브 클래스 ID에 대한 Nhibernate table-per-class 기준은 부모 테이블의 키 열을 사용합니다.
그러나 하위 클래스를 구체적으로 쿼리 할 때 회사를 말하고 Id (내가 알고있는)에서 필터링하면 결과 SQL이 잘못되어 SQL Server에서 오류가 발생합니다. 기준 :
session.CreateCriteria<Company>()
.Add(Expression.Eq("Id", 25)
.List<Company>();
결과 생성 된 SQL :
SELECT this_.PartyId,
this_.CompanyName
FROM Companies this_
inner join Parties this_1_
on this_PartyId = this_1_.Id
WHERE this_1_.PartyId = 25
문제는 (마지막 줄 - PartyId가 당사국 테이블에 정의되지 않음) 자식 테이블의 키 열에서 사용되는 것입니다 부모 테이블 "Id"는 C#의 Party 클래스에서 파생되므로 다소 이해가갑니다. 그러나 파티 매핑에 정의 된 Id "Id"대신 "PartyId"키 열을 사용하는 이유는 무엇입니까? 어떻게 작동시킬 수 있습니까?
감사합니다.
편집 : 질문으로, 여기에 (블로그 게시물에있는 것과 같은) 매핑이
<class name="Party"
abstract="true"
table="Parties">
<id name="Id">
<generator class="identity"/>
</id>
<joined-subclass
table="People"
name="Person">
<key column="PartyId"/>
<property name="FirstName"/>
</joined-subclass>
<joined-subclass
table="Companies"
name="Company">
<key column="PartyId"/>
<property name="CompanyName"/>
</joined-subclass>
파티 매핑을 게시 할 수 있습니까? – Rippo