2010-01-11 2 views
2

나는 두 개의 테이블이 : 내 CalendarEntry 클래스에서매핑 대다 최대 절전 모드/NHibernate에의 가입 테이블없이

CalendarEntry 
    Id 
    Date 
    ... 

Holiday 
    Id 
    Date 
    ... 

을, 내가 원하는이

public ISet<Holiday> Holidays { ... } 

같은 속성이 있습니다 동일한 Date에서 발생하는 Holiday 인스턴스를 CalendarEntry으로 연결할 수 있습니다. 그러나, 나는 이것을하는 방법을 생각해 낼 수 없다.

1 대 다수로 매핑을 시도했지만 일대 다 수의 숫자가 의 Id 열을 사용하여 결합을 수행해야한다고 자동으로 가정합니다 (고유 한 것으로 보장 된 유일한 속성이므로 이것은 일대 다 (one-to-many)가되어야 함).

나는 many-to-many로 매핑을 시도했지만, many-to-many는이 경우에 원하지 않는 별도의 join 테이블을 필요로한다.

내 질문은 : NHibernate에서 이것을 매핑 할 수 있습니까? 어떻게해야합니까? 가능하지 않다면 왜?

+0

사용하려는 매핑을 게시 할 수 있습니까? –

+0

NHibernate.Mapping.Attributes를 사용하고 있으므로 HBM 파일이 없지만 내일 사용한 매핑을 게시 해 보겠습니다. – Liedman

답변

1

내가해야 할 일은 휴일 항목을 가져 오는 쿼리를 설정하는 것입니다. 이 매핑을 사용하여 수행 할 수 있는지 잘 모르겠습니다.


적용되지 않을 수 있습니다 내 원래의 대답에서 추가 정보 : 당신은 NHibernate에있는 다 대다 관계를 가질 수있는 조인 테이블 항목에 대해 별도의 엔티티 클래스를 생성하지 않고 있지만, 기본 데이터는 여전히 필요 데이터베이스 어딘가에 존재한다.

+0

조인 테이블을 사용하는 것을 꺼리는 것은 부분적으로는 데이터베이스 스키마 수정에 대한 저항에 기인합니다. 그러나 대부분은 CalendarEntry 및 Holiday *의 날짜 열이 엔티티 간의 연결이고 새 조인입니다 테이블이 중복 된 것처럼 보입니다. – Liedman

+1

예 ...그것은 매우 느슨한 결합이지만, Hibernate는 그것을 강력하게 기대한다 (ID를 사용). 나는 이것을 지금 질의로 설정했다. –

1

당신은 NHibernate 2.1에서 사용 가능하다고 믿는 property-ref를 사용하여이를 수행 할 수 있어야합니다. link text에서 찾았습니다. 여기에 NHibernate에 추가하기 위해 jira이 있습니다.

이것이 날짜 열에서 작동하는지 확신 할 수 없으며 날짜 입력란에 시간 데이터가 포함되어 있다면 운이 좋지 않을 것입니다.

언제든지 관계를 모델에서 분리하고 저장소 메소드 (예 : GetHolidaysForDate)를 통해 콜렉션에 액세스 할 수 있습니다. 공휴일은 캘린더 항목 및 문화와는 구별되기 때문에 이것은 나에게 더 합리적 일 것입니다. "휴가"와 같은 미국 외의 의미를 사용하지 않는 한

0

적합한 ID를 포함하는 데이터베이스 뷰 (또는 파생 테이블 쿼리)를 CalendarEntryHoliday에서 만든 다음 뷰를 사용하여 다 대다 관계를 매핑 할 수 있습니다. 기술적으로는 조인 테이블이 필요하지 않지만 NHibernate는 원하는 방식으로 작업하십시오.

당신은 NHibernate가 (아마도 inverse="true"cascade="none"의 조합을) 콜렉션을 업데이트하려고하지 않고 코드에서 수정하지 않도록하고 싶을 것입니다. 테이블을 원해.

+0

이렇게하려면 데이터베이스가 CalendarEntry와 Holiday를 뷰에 대해 한 번, 실제 데이터를 페치하기 위해 한 번씩 두 번 가입해야합니다. 또한 oracle을 사용하여 두 행을 조인하려고하면 property-refs로 매핑 할 때 사용되는 중첩 루프 조인이 a로 대체 된 뷰에 대한 조인으로 바뀌 었습니다. 해시 조인 및 전체 테이블 스캔을 ... – meriton

+0

특히 읽기 성능에 대해 걱정이된다면 구체화/인덱싱 된보기를 사용할 수 있지만 문제 도메인에서는 주어진 테이블에 최대 수천 개의 행이있을 수 있습니다. property-ref가 실행 가능한 솔루션이라면, 아마도 이것이 최선의 선택 일 것입니다.하지만 이전에 어려움을 겪었습니다. 이것은 좋은 해결책입니다. – Sam