문제

나는 매우 간단한 앱을 디자인하려고 노력하고 있으며 최대 절전 모드의 엔티티 및 가치 객체 정의와 약간 혼란스러워하고 있습니다 (Hibernate와의 Java 지속성 4 장에 정의 된 바와 같이).

내가 가진 것은 주문을 할 수있는 고객과 함께하는 앱입니다 (1 ~ 많은 관계). 이 주문 각각에는 많은 주문 행이 있습니다 (또한 1 ~ 많은). 이제 고객은 신원 (고객 번호)을 가지고 있다고 생각하며 주문 (주문 번호)도 엔티티 객체이기도합니다. 내 혼란은 주문 라인과 함께 제공됩니다.

주문 라인에는 수량, 제품 번호 및 가격이 있습니다. 주문 라인은 주문 없이는 존재할 수 없으며 자체의 신원이 없으므로 값 객체로 본다. 그러나 주문 라인을 주문 테이블의 일부로 만들 수는 없습니다. 값 객체의 정의와 많은 관계가 어떻게 작동합니까? 최대 절전 모드에서 :

"값 유형의 객체는 데이터베이스 아이덴티티가 없으며 엔티티 인스턴스에 속하며 그 영구 상태는 소유 엔티티의 테이블 행에 내장되어 있습니다. 값 유형은 식별자 또는 식별자 속성이 없습니다."

누군가 내 혼란을 해결할 수 있다면 정말 감사하겠습니다 :)

도움이 되었습니까?

해결책

Hibernate의 문서는 구별됩니다 엔티티 유형 그리고 가치 유형, 가치 객체가 아닙니다.

  • 엔티티 유형의 개체 : 자체 데이터베이스 아이덴티티가 있습니다.
  • 값 유형의 대상 : 엔티티에 속하며 영구 상태는 소유 엔티티의 표 행에 포함됩니다. 값 유형에는 식별자 또는 식별자 속성이 없습니다.

내가 기억할 수있는 한,이 책은 address 단일 문자열과 a로 표시됩니다 user 주소 문자열이 포함 된 개체 :

  • 값 유형 (일반적으로 데이터베이스 레벨의 동일한 테이블의 열을 의미)으로 구현 한 경우 사용자가 삭제 된 경우 주소도 마찬가지입니다. 주소는 사용자 없이는 살 수 없으며 공유 할 수 없습니다.

  • 엔티티 유형 (별도의 테이블을 사용하는 것을 의미 함)으로 구현되면 주소는 사용자없이 자체적으로 존재하며 두 사용자는 동일한 주소를 공유 할 수 있습니다.

귀하의 경우 주문 라인은 주문에 속하지 않으며, 영구 상태는 주문 행에 포함되지 않으며 (의미가 없습니다) 자체 정체성 (Orderid 및 ProductID로 만들어짐)이 있습니다. 주문 라인은 확실히 값 유형이 아니며 엔티티 유형입니다.

실제로, 당신이 협회 (일대일, 일대일 등)의 관점에서 생각하자마자 확실히 조작하는 엔티티에 대한 것입니다.

다른 팁

나는 당신이 가진 것이 다소 일반적인 ORM 질문이라고 생각합니다.

당신은 "주문 라인은 주문 없이는 존재할 수 없으며 자체의 신원이 없습니다.".
글쎄, OrderLine은 주문으로 존재할 수 없지만 신원을 가질 수 없다는 것을 의미하지는 않습니다.

주문 엔티티를 가져 가면 고객 없이는 존재할 수 없지만 이미 엔티티로 간주 했습니까?

따라서 엔터티에 대한 제안이 있습니다.
- 고객 (주문 엔티티 이상이 없거나 더 이상)
- 주문 (하나 이상의 OrderLine 엔티티를 가질 수 있음)
- 주문 라인

나는 당신이 복합 요소를 찾고 있다고 생각합니다. 참조에는 실제로 Order 및 BuyasedItems (Order Line)를 사용하는 예가 있습니다. Hibernate가 혼자 서있을 수 없다고 말할 때, 그것은 자체 테이블을 가질 수 없다는 것을 의미하지는 않습니다.

<class name="eg.Order" .... >
  ....
  <set name="purchasedItems" table="purchase_items" lazy="true">
    <key column="order_id"/>
    <composite-element class="eg.Purchase">
      <property name="purchaseDate"/>
      <property name="price"/>
      <property name="quantity"/>
      <many-to-one name="item" class="eg.Item"/>
    </composite-element>
  </set>
</class>

에서: 종속 물체의 컬렉션

값 객체는 평등이 정체성을 기반으로하지 않는 단순한 엔티티를 나타내는 작은 객체입니다. 즉, 두 값 객체는 동일한 값을 가질 때 동일합니다.

값 유형과 값 유형이 일대일 매핑과 일대일 매핑으로 지원되기 때문에 주문 선을 만들 수 있습니다. 분명히 Java 컬렉션은 값 유형의 *-many 관계를 Entity와 매핑하는 데 사용됩니다. 적절한 수집, 요소 및 복합 요소는 필요에 따라 사용되며 아래에 설명되어 있습니다. 엔티티와 값 유형 간의 일대일 관계 () 비 JDK 유형), 복합 요소 사용. 값 유형 테이블이 JDK 유형 (문자열)의 단일 속성을 포함하는 일대일 관계의 경우 요소 사용. 이 개념은 최대 절전 모드와의 Java Persistence의 6 장에 나와 있습니다. 자세한 내용은이 링크를 참조하십시오https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/components.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top