2009-02-03 3 views
1

컬렉션을 손으로 매핑해야합니다.NHibernate Bag Mapping

저는 회의실 테이블과 calEventId에 대한 참조를 보유하기 위해 조인 테이블을 사용하고 있습니다. 그러나 조회는 주로 방의 buildingID을 기반으로하므로 다음 매핑에 buildingID을 추가하고 싶습니다. 아무도 그렇게하는 방법을 알고 있습니까?

나는 NHibernate 문서를 살펴 봤지만 아무 것도 찾을 수 없다.

<bag name="rooms" table="tb_calEvent_rooms" lazy="false"> 
    <key column="calEventID"/> 
    <many-to-many class="BasicRoom" column="roomID"/> 
</bag> 

등급 :

public class BasicRoom 
{ 
    private long _id; 
    private long _buildingID; 
    private string _roomName; 

어떤 힌트/많이 감사합니다 도움이됩니다.

추론 : 나는 조인 테이블에 buildingID를 추가, 그래서 만약

방은 건물을 변경하지 않을 것이다;

SELECT * 
FROM 
    dbo.tb_calEvent_rooms 
    INNER JOIN dbo.tb_calEvents ON (dbo.tb_calEvent_rooms.calEventID = dbo.tb_calEvents.id) 
    INNER JOIN dbo.tb_rooms ON (dbo.tb_calEvent_rooms.roomID = dbo.tb_rooms.id) 
    INNER JOIN dbo.tb_buildings ON (dbo.tb_rooms.buildingID = dbo.tb_buildings.id) 
WHERE 
    dbo.tb_buildings.id = 54 

내 추론이 정확

SELECT * 
FROM 
    dbo.tb_calEvents 
    INNER JOIN dbo.tb_calEvent_rooms ON (dbo.tb_calEvents.id = dbo.tb_calEvent_rooms.calEventID), 
    dbo.tb_buildings 
WHERE 
    dbo.tb_buildings.id = 54 

으로 - 내가 좋아하는 뭔가에서 select 문의 복잡성을 줄일 것인가?

답변

1

many-to-many 요소에서 column 속성을 제거하고 참조 추가 column 요소와 함께, 자식 노드 INSEAD로 추가 buildingID : 수 있도록해야

<bag name="rooms" table="tb_calEvent_rooms" lazy="false"> 
    <key column="calEventID"/> 
    <many-to-many class="BasicRoom"> 
    <column name="roomID"/> 
    <column name="buildingID"/> 
    </many-to-many> 
</bag> 

buildingID를 기반으로 쿼리 할뿐만 아니라, roomID.

+0

감사합니다. 다음 오류가 발생합니다. faultString = "외래 키 (FK3EDE57A96B977B0C : tb_calEvent_rooms [roomID, buildingID]))는 참조 된 기본 키 (tb_rooms [id])와 동일한 열 수를 가져야합니다." 방 또는 건물 매핑이 잘못되었다고 가정합니다. Hmmmmm .. – user17510

+0

예, 참조 된 테이블에 PK로 두 열을 모두 포함해야합니다. –