Mark Struzinski
그는 물었다 12년 전
3

최선의 방법은 모델 n:1 관계를 네이베르나트 다룰 때 기존 DB?

경고 - 저는 아주 새로운 네이베르나트. 이 질문에 그러니까말이야 리스토어와 I& # 39 m, s # 39 there& 합니다 간단한 것, 간단한 I& # 39 라고 하지만, ve been 바퀴고요 여기있을 일정 기간 동안 제 1 회전. 나는 정말 알 수 있는 기존 데이터베이스 (db) 를 다루는 can& # 39, 변경할 수 없다. I have a 세부내용에서 표에 나열된 지불 계획 된 수락됨 고객. Id 가 각 결제 계획이 있는 링크 다시 참조입니다 표를 plan& 내려받습니다 # 39 의 약관, etc. 나는 내 객체 모델, 클래스, 그리고 충족되었으며 카스파테드플런 계획하십시오 구분된다. 원래, 내가 표 참조 테이블 (모델) 에서 사용한 n:1 릴레이션십 상세함을 백됩니다 이 관계에서 네이베르나트. 난 또 일대다 관계를 만들어 가고 있는 클래스 조치 반대 방향으로 계획을 카스파테드플런 구분된다. 내가 그 동안 이 멀쩡했어 단순히 판독값 데이터. 나는 내 갈 계획 객체에는 내 카스파테드플런 plan& # 39, s 클래스 속성 정보를 읽을 수 있었다. 내 문제에 대한 새로운 정보를 삽입할 때 내가 받은 행뿐만 시작 했습니다 표. From my 판독값 객체가 같다고 추가하기 위해서 새로운 것을 만들 수 있는 유일한 방법은 부모 객체에는 그리곤요 세션을 저장합니다. 하지만 난 don& # 39, t want 만들어야 할 때마다 새로운 상세함을 기록하십시오 새 모피쳐 계획 객체가이 만들겠습니다. 이 불필요한 오버헤드에 같다. 아는 사람 갈 경우 이에 대한 잘못된 방식으로?

답변 6 개

39 이 그들의 부모, 자식 객체는 로털 redboot*용 i&; d 회피 멀리, 아주 아주 빠르게 반복 할 때 매우 과도한 확보할 수 있습니다. # 39 i& you& 어떻게 보세요; d # 39, re 전통을 파괴하려 도메인 모델을 먼저 사용할 수 있는 일종의 일이다. 아직 ID 참조 테이블 및 남겨두십시오 unmapped 그들을 그냥 쉽게 할 수 있습니다.

여기에서는 두 예 매핑이라는 너회가 이동 할 수 있는 올바른 방향으로 I& 수 있지만, 애드립 테이블 이름 수 있다는 것 등을 움말. # 39 숨기지 않았다. D # 39 도 충족되었으며 열거도 스테이시드 매핑 제안하세요 i& 것이다.

꼭 운행에서어떠한 매핑하므로 주의를 페스티브리 detaiils 테이블 컬렉션으로.

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
    <class lazy="false" name="Namespace.Customer, Namespace" table="Customer">
        <id name="Id" type="Int32" unsaved-value="0">
            <column name="CustomerAccountId" length="4" sql-type="int" not-null="true" unique="true" index="CustomerPK"/>
            <generator class="native" />
        </id>

        <bag name="AcceptedOffers" inverse="false" lazy="false" cascade="all-delete-orphan" table="details">
          <key column="CustomerAccountId" foreign-key="AcceptedOfferFK"/>
          <many-to-many
            class="Namespace.AcceptedOffer, Namespace"
            column="AcceptedOfferFK"
            foreign-key="AcceptedOfferID"
            lazy="false"
           />
        </bag>

  </class>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
    <class lazy="false" name="Namespace.AcceptedOffer, Namespace" table="AcceptedOffer">
        <id name="Id" type="Int32" unsaved-value="0">
            <column name="AcceptedOfferId" length="4" sql-type="int" not-null="true" unique="true" index="AcceptedOfferPK"/>
            <generator class="native" />
        </id>

        <many-to-one 
          name="Plan"
          class="Namespace.Plan, Namespace"
          lazy="false"
          cascade="save-update"
        >
        <column name="PlanFK" length="4" sql-type="int" not-null="false"/>
        </many-to-one>

        <property name="StatusId" type="Int32">
            <column name="StatusId" length="4" sql-type="int" not-null="true"/>
        </property>

  </class>
</hibernate-mapping>

39 는 데이터베이스, 내가 쓰는 반면 구성도를 didn& 내용을 볼 수 없다.

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
    <class lazy="false" name="Namespace.Customer, Namespace" table="Customer">
        <id name="Id" type="Int32" unsaved-value="0">
            <column name="customer_id" length="4" sql-type="int" not-null="true" unique="true" index="CustomerPK"/>
            <generator class="native" />
        </id>

        <bag name="AcceptedOffers" inverse="false" lazy="false" cascade="all-delete-orphan">
            <key column="accepted_offer_id"/>
            <one-to-many class="Namespace.AcceptedOffer, Namespace"/>
        </bag>

  </class>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
    <class lazy="false" name="Namespace.AcceptedOffer, Namespace" table="Accepted_Offer">
        <id name="Id" type="Int32" unsaved-value="0">
            <column name="accepted_offer_id" length="4" sql-type="int" not-null="true" unique="true" />
            <generator class="native" />
        </id>

        <many-to-one name="Plan" class="Namespace.Plan, Namespace" lazy="false" cascade="save-update">
            <column name="plan_id" length="4" sql-type="int" not-null="false"/>
        </many-to-one>

  </class>
</hibernate-mapping>

아마 이렇게 트릭 (I& # 39, ve 국한됨 수행되 예제에서와 매핑이라는 you& # 39 의 컬렉션, ll, 다른 특성을 추가할 수 있다).

네이베르나트 데 도움이 될 수 있는 팁을 (또는 않을 수도 있다). 뷰 테이블 뷰 (view) 는 해당 객체를 것처럼 상대로 매핑할 수 있습니다. 그냥 대체하십시오 테이블 뷰 이름으로 이름; 모든 NOT NULL 필드용 deltamove 포함되어 있는 것으로 보고 이 매핑에서는 작동합니다.

이 문제를 어떻게 할 수 있는 방안을 계획 객체가이 포함될 것으로 카스파테도퍼 객체에는 그런후에도 너회의 카스파테도퍼스 취합은 카스파테도퍼 포함된 개체, 객체. 고객과 같은 것입니다. 이 사실은 개체는 서로 하위여야 것이 문제가 될 것 같습니다.

마찬가지로 어떨거라고 너회의 카스파테도퍼 복잡합니까 는 두 개의 한다. 이 계획에 포함된 고객이 제공/제품 제공사항 것을 나타냅니다. 벗어나는 단일 책임 원칙.

구분하기 위해 제공하는 것은 있을 수 있고, 그 계획에 따라 오퍼링에 즉 수락됨 있습니다. 그래서 here& # 39 m, s what I& # 39, 앞으로 해야 할 것:

  1. 별도로 만들어 오퍼링에 객체에는 갖지 않는 상태 (예를 들어 있지 않기 때문에 고객 및 정보기술 (it) 및 계획을 갖고 있지 않은 상태 - 않니다 대뿐입니다 프리드 속해 있는 그 속성.
  2. 계획 객체가이 수정하십시오 보유하고 제공사항 컬렉션 () 는 이 제안을 받아들인 것으로 컨텍스트로 가지고 있지 않다).
  3. 마지막으로, 고객 서비스, 들어 있도록 수정하십시오 카스파테도퍼 객체에는 상태. 고객 그대로 남아 있습니다.

이렇게 하면 문제를 풀다 절약합니다 너회의 네이베르나트 매핑이라는 및 객체에는 충분히 있다고 생각한다. )

39 는 아마도 이 때문에, 나는 내 네이베르나트 제한되는지 don& t 다운로드되었는지 만들 수 있지만, 경험하십시오 바스데일 클래스용 세부 내용을 직접 매핑할 때 그냥 속성을이 디스크입니다. diskid 표.

두 번째 클래스를 생성하고 있는 상속됩니다 바스데일 클래스를 작성할 수 있도록 할 때 추가 모피쳐 계획 객체가이 바스데일 클래스용 만 만들면 상세함을 행과 할당하십시오 프랜드 신앙이니라, 이를 통해 전체 세부 계획 객체가이 채우는 데 필요한 기록 상위 클래스 상속됨 상세함을 함께 사용할 수 있습니다.

39, 내가 할 수 있는 특징을 감지에서 don& 다운로드되었는지 t # 39 더 있지만, ll 구체화합니다 및 I& 알려주세요.

39 이것은 다음과 같이 모델링할 수 시행하십시오 외곽진입 I&; d

고객 객체에는 이콜레스티온 &amp PaymentPlan&amp, gt, 한 lt;; 페이망플랜스 계획을 나타내는 고객이 수락됨.

이 페이망플런 고객에게 가방을 사용할 수 있는 고객 정보 테이블을 사용하는 약간만이라도 매핑되었습니다 id& # 39 의 매핑되었습니다 建立既能衡量 라우팅할 페이망플랜스. 케스케이드 모든 파일 삭제 사용하여, 고객이 해당 고객 정보와 페이망플랜스 에서 삭제된 항목 모두 충성하 약간만이라도 삭제했습니다.

이 계획에 지불 조건에 있는 한 프란테름스 객체에는 페이망플런 객체에는 활동하였다.

이 프란테름스 약간만이라도 매핑되었습니다 맞추기바인딩 페이망플런 n:1 사용하여 구성도를 캐스케이딩이란 세이브 업데이트 그냥 삽입하십시오 참조입니다 페이망플런 에 관련 프란테름스 객체에는 만들 것이다.

이 모델을 사용하여 만들 수 있습니다 다음 프란테름스 독립적으로 추가할 때 고객에게 새로운 페이망플런, you&; d # 39 의 관련 프란테름스 객체에는 반군지역 새로 만드는 페이망플런 객체에는 후 관련 고객 취합은 추가합니다. 마지막으로 you& 고객 및 저장 (save; d # 39 더 케스케이드 네이베르나트 운영할 수 있다.

39; d 다니엘을 you& 고객과 페이망플런 객체와 객체, 고객과 함께 프란테름스 객체에는 (고객 테이블) 의 소유 인스턴스들도 페이망플랜스 (세부 표) 가 특정 프란테름스 모든 아드하 (계획 테이블).

39, 좀 더 구체적인 예로 i& ve got 매핑에서는 하지만 하는 일은 아마도 가장 필요한 경우 it& # 39 의 구문을 통해 자신의 이름으로 모델 쉐퍼드도 don& 관한 충분한 정보를 제공하지 # 39, 데이터베이스 테이블에서 구체적인 예는 없다.