hibernate 학습의 12편(속편)

넷째, 각 구체적인 클래스는 하나의 독립된 표 (union-subclass) 를 비추는데, 즉, 표와 하위 클래스 간의 독립된 일대일 관계가 있는 모든 하위 클래스의 표에 있는 정보는 완전하기 때문에 표를 연결할 필요가 없다.person.hbm.xml 구성은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hibernate.extend" auto-import="false">
    <class name="Person" table="person">
        <id name="id">
            <generator class="hilo"/>
        </id>
  
        <property name="name"/>
        <property name="age"/>
        <union-subclass name="Worker" table="worker">
            <property name="work_year"/>
        </union-subclass>
        <union-subclass name="Farmer" table="farmer">
            <property name="farm_name"/>
        </union-subclass>
    </class>
</hibernate-mapping>

 
생성된 sql 문구는 다음과 같습니다.
쓰다
Hibernate: insert into person (name, age, id) values (?, ?, ?)
Hibernate: insert into worker (name, age, work_year, id) values (?, ?, ?, ?)
Hibernate: insert into farmer (name, age, farm_name, id) values (?, ?, ?, ?)
Hibernate: select person0_.id as id8_0_, person0_.name as name8_0_, person0_.age as age8_0_, person0_.work_year as work1_9_0_, person0_.farm_name as farm1_10_0_, person0_.clazz_ as clazz_0_ from ( select null as work_year, id, age, name, null as farm_name, 0 as clazz_ from person union select work_year, id, age, name, null as farm_name, 1 as clazz_ from worker union select null as work_year, id, age, name, farm_name, 2 as clazz_ from farmer ) person0_ where person0_.id=?
 
실행 후 데이터베이스의 테이블 구조는 다음과 같습니다. person 테이블: +--+------------+----| id | name | age | +--+----------+--------+| 1 | person | 22 | +----------------------------------------------------------------------------------------------+| id | name | workyear | +--+--------+----+------------------------------------------------+--------------------------------------+------------+------------------------------+| id | name |age |farmname|+--+------+----+----------------------+|3 | farmer | 31 | little candy | +----+----+--------------------------------+주의: 우리는 메인 키 생성기를 높낮이 키 생성기로 바꾸었다는 것을 알아차렸다.native는 사용하는 데이터베이스에 따라 상응하는 키 생성 방식을 자동으로 선택하기 때문에 mysql 데이터베이스를 사용하기 때문에 키 필드는 자동으로 증가한다.세 개의 테이블에 같은 키 id가 있다는 뜻이다.이렇게 하면 조회할 때 문제가 발생할 수 있다.당신이 id가 1인 개인을 찾았을 때, 그는 세 장의 표에서 모두 결과를 얻을 것이다. 이것은 분명히 안 된다.그래서 여기서 고저 키hilo 생성 방식을 바꾸면 이런 문제가 발생하지 않을 것이다.위의 표의 데이터도 알아볼 수 있다.세 테이블의 id는 서로 다르다.이런 설계는 실제 수요에 더욱 부합된다.보충: 또한 때때로 부류는 추상류이기 때문에 데이터베이스에 표를 만들 필요가 없다.이것은 속성 설정 하나만 추가하면 됩니다.                                                                                                               

좋은 웹페이지 즐겨찾기