'하이버네이트3'에 해당되는 글 5건

  1. 2010.06.04 Hibernate n-1 관계
  2. 2010.06.01 Hibernate의 컴포넌트
  3. 2010.06.01 개체(Entity)타입과 값(Value) 타입
n-1관계를 표현할때는
  • 외부 키를 이용한 n-1 관계
  • 조인 테이블을 이용한 n-1 관계
외부키를 이용한 n-1 관계

Order 와 Product 클래스는 n-1  관계를 갖는다.
<many-to-one> 태그를 사용하여, Order클래스에서 Product 클래스로 부터 n-1관계를 표시할 수 있다.

<class name="Product" table="PRODUCT">
  <id name="id" column="ID">
    <generator class="identity" />
  </id>
..
<class name="Order" table="ORDERINFO">
  <id name="id" column=ID">
    <generator class="identity" />
  </id>

  <many-to-one name="product" class="Product" column="PRODUCTID" />
  <component name="address" class="Address"">
  ..
  </component>
</clss>

죠인 테이블을  이용한 n-1 관계
조인 테이블에 있는 두 칼럼이 모두 주요키로 사용되며, 조인 테이블의 각 칼럼은 각각 ITEM테이블과 SELLER  테이블의 주요키를 참조하는 외부 키이다.
조인 테이블을 이용, n-1의 관계를 매핑할 때에는 조인 테이블을 이용한 1-1의 관계를 매핑할때와 마찬가지로 <join>  태그 사용
<class name="item" table="ITEM">
  <id name="id' column="ID">
    <generator clss="identity" />
  </id>
  <join table="ITEM_SELLER" optional="true">
    <key coulmn="ITEMID" />
    <many-to-one name="seller" column="SELLTERID" />
  </join>
</class>

<class name="Seller" table="SELLDER">
  <id name="id" column="ID">
    <generator class="identity" />
  </id>
</class>
조인 테이블을 이용한 1-1 관계의 경우와 비슷.
<many-to-one>에서 unique  속성을 명시하지 않는 것이 차이점. n-1관계이기 때문에 동일한 값의 SELLERID 칼럼에 여러
ITEMID 값이 존재 할수 있다. -> SELLERID는 유일한 값을 갖지 않으므로 unique 속성을 명시하지 않음.



저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 영겁회귀
EMOPLOYEE 테이블이 스키마가 다음과 같을때
 EMPLOYEE
 ID
 KOR_SURNAME
 KOR_NAME
 ENG_SURNAME
 ENG_NAME

<component> 태크로 컴포넌트 매핑하기

<class name="Employee" table="EMPLOYEE">
  <id name="id" column="ID" type="int">
    <generator class="identity" />
  </id>

  <component name="korName" class="Name">
    <property name="surname" column="KOR_SURNAME" />
    <property name="name" column="KOR_NAME" />
  </component>

  <component name="engName" class="Name">
    <property name="surname" column="ENG_SURNAME" />
    <property name="name" column="ENG_NAME" />
 </component>
</class>
<component>의 name은 프로퍼티의 이름,  class는 값 타입으로 사용되는 클래스를 의미.
korName프로퍼티의 surname프로퍼티는  KOR_SURNAME칼럼과 매핑된다.

<component>로  매핑되는 클래스도 기본 생성자를 제공해야 함
public class Name {
  private String surname;
  private String name;

  public Name(String surname, String name) {
    this.surname = surname;
    this.name = name;
  }

  public Name() {}

  public void setName() ....

  public String getSurname() ....

  ..
}

example
Employee emp = new Employee();
Name korName = new Name("박", "지성");
Name engName = new Name("Park", "Jisung");
emp.setKorName(korName);
emp.setEngName(engName);
session.save(emp);

Employee emp = (Employee)session.get(Employee.clss, new Integer(1));
Name korName = emp.getKorName();
korName.getSurName();
....

컴포넌트에서 부모객체 참조하기

public class Name {
  private Employee employee;
 
  public Employee getEmployy() {
    return employee;
  }

  public void setEmployee(Employee employee) {
    this.employee = empoyee;
  }

  ..
}

<parent> 로 부모객체를 명시
<class name="Employee" table="EMPLOYEE">
  ..
  <component name="forName" class="Name">
    <parent name="employee" />
    <property name="surname" column="KOR_SURNAME" />
    ..
  </component>
</class>

example
Employee emp = (Employee) session.get(Employee.class, new Integer(1));
Name korName = emp.getKorName();
..
korName.getEmployee();

컴포넌트 중첩
<class name="Employee" table="EMPLOYEE">
  ..
  <component name="korName" class="Name">
    <property name="surName" column="KOR_SURNAME" />
    <property name="name" column="KOR_NAME" />
  
    <component name="familyInfo" class="FamilyInfo">
      <property name="origin" column="FAMILY_ORIGIN" />
      ..
    </component>
  </component>
</class>

 

저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 영겁회귀

public class User {
  private int id;
  private Address address;
  ..
}

public class User {
  private int id;
  private address address;
  ..
}

상단은 User와 Address가 N-1을 가지고 있다. Address는 User에 독립적이며, 개별적인 수명주기를 가지고 있다 이때 Address를 Entity(개체) 타입이라 한다.
하단의 경우 User와 Address는 상단과 클래스의 형식이 같지만, User와 수명주기가 같아, 이처럼 다른 객체에 생명주기를 의존하고 있는 객체를 Value(값)타입이라고 한다.

저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 영겁회귀

티스토리 툴바