2009-07-01 3 views
0

나는 비교적 Hibernate에 익숙하지 않고 상대적으로 단순한 기존 데이터베이스를 Hibernate에서 사용할 수있는 것으로 마이그레이션하려고 시도하고 있으며, 내 애플리케이션을 구조화하는 방법에 대한 조언을 찾고있다.Hibernate 다형성에서의 쿼리

나는 3 개 개체의 유형이 있습니다

  • 항목
  • 카테고리
  • PropertyType

항목 및 종류와 PropertyType 모두 비슷를; 그들은 둘 다 등 이름, 설명, 만든 날짜를 가지고 있지만 각각 추가로 별도의 기능이 있습니다

  • 항목 구체적인 위치가 (URL)
  • 카테고리 항목 및/또는 카테고리의 세트를 포함하고,에서를 카테고리와 아이템 사이의 다 대다 연관, 그리고 상위 카테고리에서 하위 카테고리까지의 인접리스트.
  • PropertyType은, 항목, 카테고리, 또는 다른 PropertyTypes 지금 내가 항목 및 카테고리는 별도의 테이블에 정의되어있다

와 관련된 키/값 필드의 속성 테이블에서 사용하기위한 메타 데이터의 열쇠입니다 하지만 Item과 Category가 서브 클래스 인 추상 Node 엔티티 클래스를 만드는 것이 현명한 것인지 궁금합니다. PropertyType은 충분히 다르기 때문에 자체 테이블에 있어야합니다. (PropertyType이 다른 PropertyType에 적용되는 3 개의 항목 만 있고 PropertyType이 항상 노드에 적용되도록 작업을 쉽게 만드는 경우 제거 할 수 있습니다.)

현재 내 속성 테이블에는 PropertyTypeId, ID (속성이 적용되는 Item, Category 또는 PropertyType의 ID), id_context (이전 필드의 식별자 : 0 = Item, 1 = Category, 2 = PropertyType) 및 값 (임의의 문자열)입니다.

구체적인 질문 :

  1. 나는, 기존 테이블 구조 (예를 들어, 항목 및 카테고리를 다른 테이블을 가지고)을 유지하는 방법을 내가 속성 유형을 결정하는 id_context 판별를 사용하여 최대 절전 모드 알 수 있습니까 원하는 경우? Item/Category/PropertyType을 공통 조상의 서브 클래스로 만들어야하므로 주어진 PropertyType과 연결된 Property 객체를 얻을 때 Item 또는 Category가 포함 된 목록을 반환 할 수 있습니까?

  2. 최대 절전 모드를 사용해야합니까? 내가 원하는 것을하기 위해 SQL 질의를 만드는 방법을 알고있다. 나는 그저 Hibernate를 감싸는 방법을 생각하는 데 어려움을 겪고있다.

  3. 원하는 쿼리를 수행하기 위해 최대 절전 모드로 전환하려면 어떻게해야합니까? 예 : 만약 PropertyType이 258이고, Category 객체 (id_context = 2)에 적용되는 Property 레코드를 반환하기를 원한다면 SQL (SELECT * FROM Property = 258 및 id_context = 2)에서 수행하는 방법을 알고 있지만 그렇지 않습니다. 어떻게 최대 절전 모드에서 그렇게 할 수 있는지.

+0

가 있습니까 : 최대 절전 모드가 도움이 될 수 제공하는 다양한 기능이 있습니다 Hibernate XML 맵핑 파일이나 주석을 사용할 계획이십니까? –

+0

은 주석을 선호하지만 XML을 고려할 것입니다. –

답변

1

외래 키 참조에서 원하는 것과 외래 키 측의 판별 자 열은 현재 최대 절전 모드에서 지원되지 않습니다.진정한 Hibernate-aholic은 외래 키 제약을 정의 할 수 없기 때문에 그것은 건전한 관계형 모델이 아니라고 주장 할 것이다.

Hibernate를 사용하여 모델링하려면 세 가지 엔티티 유형을 모두 병합하거나 하나의 Item/Category (하나가 통일 됨)를 참조하는 열과 하나의 PropertyType을 참조하는 두 개의 개별 열이 있어야합니다. 2 개의 분리 된 서브 클래스.

기본적으로 Hibernate에 맞게 전체 DB 설정을 변경해야합니다.

'투명'ORM이 아닌 Hibernate로 이동해야하는 이유가 있습니다. 나는 당신이 당신의 어플리케이션에서 Hibernate가 그것과 일치 하는지를 결정해야한다고 생각한다 : 당신은 어떤 문제를 겪고 있는가? 당신은 Hibernate가 해결하기를 원하는가? 게으른로드 - - 늦은 쓰기 (TX 저지른 경우에만 DB에 기록) - 1 차 및 2 차 수준의 캐싱 - ...

건배

관련 문제