Hibernate Tools

Eclipse Plugin 형태로 제공되는 Hibernate Tools (http://www.hibernate.org/255.html) 를 활용함으로써, 테이블을 기반으로 Hibernate Mapping XML을 자동 생성할 수 있고 HQL(Hibernate Query Language), Hibernate Criteria 정의 및 실행이 편리해진다. 또한, 해당 HQL, Criteria 정의가 Hibernate에 의해 어떠한 SQL로 변환되는지 HQL 정의와 동시에 눈으로 확인해 볼 수 있다.
본 페이지에서는 Hibernate Tools 활용 방법에 대해 알아보도록 하자.

Create Hibernate Configuration File

Hibernate Tools는 해당 어플리케이션에서 활용할 DBMS 정보가 정의된 Hibernate Configuration File (hibernate.cfg.xml)을 기반으로 동작한다. 따라서, Hibernate Tools를 사용하기 위해서는 먼저 다음과 같은 절차에 따라 Hibernate Configuration File을 생성해야 한다.

Step 1.

hibernate.cfg.xml 파일을 생성할 폴더를 선택한 후, 컨텍스트 메뉴에서 New > Other … 를 클릭한다. Wizard에서 Hibernate > Hibernate Configuration File (cfg.xml)을 선택하고 Next를 클릭한다.

Step 2.

Hibernate Configuration File 명을 정의한다. (일반적으로 별도 파일명을 언급하지 않는 경우, 해당 파일명은 hibernate.cfg.xml이 된다.)

Step 3.

생성될 파일에 포함될 해당 DBMS 정보를 정의한다. 아래 그림에서는 Anyframe의 샘플 어플리케이션에서 활용할 HSQL DB에 대한 속성을 정의하고 있다.

Step 4.

Next 버튼을 클릭하고 Finish 버튼을 클릭하여 Hibernate Configuration File 생성을 완료한다. 다음은 앞서 정의한 속성을 기반으로 생성된 hibernate.cfg.xml 파일이다.

Create Reverse Engineering XML File

Reverse Engineering XML File(hibernate.reveng.xml)을 생성하여 앞서 정의한 hibernate.cfg.xml 파일을 기반으로 Mapping XML 및 Persistence Class 등을 자동으로 생성시켜 보도록 하자.

Step 1.

Eclipse ToolBar에서 의 ▼를 클릭하고 Open Hibernate Code Generation Dialog… 메뉴를 선택한다.

Step 2.

왼쪽 상단의 를 클릭하여 해당 프로젝트를 위한 Hibernate Code Generation Configuration을 신규로 생성한다.
  • Name : Hibernate Code Generation Configuration 명을 정의한다. 아래 그림에서는 "anyframe-sample"이라고 정의하고 있다.

  • Console configuration : 앞서 정의한 hibernate.cfg.xml 파일이 위치한 프로젝트를 선택한다.

  • Output directory : 정의된 DB 정보를 기반으로 Reverse Engineering을 통해 Mapping XML File 및 Persistence Class 등을 생성할 소스 폴더를 선택한다. 아래 그림에서는 Anyframe Sample Services 프로젝트의 src/main/resources 폴더를 선택하였다.

  • 체크 박스 클릭 : Reverse engineer from JDBC Connection 체크 박스를 클릭하여 DB 정보를 기반으로 Reverse Engineering을 수행할 수 있도록 한다. 이 체크 박스를 클릭하면 자동 생성될 XML 및 소스의 패키지를 정의할 수 있게 된다.

  • Package : Output에 대한 패키지를 정의한다. 아래 그림에서와 같이 mappings라고 정의한 경우 관련 Mapping XML 및 Persistence Class의 패키지는 mappings가 된다.


Step 3.

reveng.xml 필드의 Setup… 버튼을 클릭하고 Create new… 버튼을 클릭하여 신규 reveng.xml 파일을 생성할 폴더를 선택한다.


이 후, 보여지는 다이얼로그에서 좌측 하단의 Refresh 버튼을 클릭하여 정의된 DB에 속한 모든 테이블 목록을 조회한다. 왼쪽 창에 보여진 테이블 중 Reverse Engineering 대상이 되는 테이블들을 선택하고 Include... 버튼을 클릭하여 오른쪽 창에 해당 테이블 목록이 정의되도록 한다. 테이블 선택을 완료한 후 Finish 버튼을 클릭한다.


위에서 생성한 hibernate.reveng.xml 파일 내에는 매핑 대상이 되는 테이블 정보가 정의된다. 다음은 hibernate.reveng.xml 파일의 내용이다.

Step 4.

Exporters 탭을 클릭하여 Reverse Engineering 대상을 선택한다. 아래 그림에서는 Persistence Class인 Domain Code와 Hibernate XML Mappings를 Reverse Engineering 대상으로 하고 있다.

Step 5.

Run 버튼을 클릭하여 DB를 기반으로 Reverse Engineering 작업을 실행시켜 관련된 파일들이 생성된 것을 확인한다. src/main/resources 폴더의 mappings 패키지 내에 각 테이블에 대한 hbm.xml 파일과 Persistence Class 파일이 생성된 것을 알 수 있을 것이다.

Configure Reverse Engineering XML File

Reverse Engineering 속성을 상세히 정의하고자 할 경우 앞서 생성한 hibernate.reveng.xml 파일을 Hibernate Reverse Engineering Editor를 통해 오픈한다. Hibernate Reverse Engineering Editor는 전체 6개의 Tab으로 구성되어 있으며, 각 Tab을 통해 다음과 같은 작업을 수행할 수 있다.

Type Mappings Tab

DB의 특정 칼럼 타입에 대해 Hibernate 타입으로 매핑이 필요한 경우에 사용한다. 정의되지 않은 칼럼 타입에 대해서는 Hibernate 타입 매핑 기준에 따라 자동적으로 처리된다.


Table Filters Tab

Reverse Engineering 대상이 되는 테이블들을 정의한다. Create Reverse Engineering XML File 에서 Filtering한 테이블들을 Rerverse Engineering 대상에서 제외시키거나 이미 제외하였던 테이블을 Reverse Engineering 대상으로 추가할 수도 있다.


Table & Columns Tab

Hibernate Tools는 기본적으로 테이블 칼럼명에 대해 Camel Case를 적용하여 Persistence Class의 속성명을 정의한다. Table & Columns Tab에서는 Camel Case가 아닌 다른 속성명을 이용하여 해당 Persistence Class를 생성시키고자 하면, 원하는 칼럼에 대해 별도로 속성명을 정의할 수 있다. 이외에도 특정 칼럼을 자동 생성 대상에서 제외하는 것도 가능하다.


위에서 언급한 Tab을 통해 hibernate.reveng.xml 파일 수정을 완료한 이후, 수정 사항을 반영하여 관련 소스 및 XML을 재생성하고자 하면, Eclipse ToolBar에서 의 ▼를 클릭하고 Open Hibernate Code Generation Dialog…메뉴를 선택한다. 그리고 수정한 Reverse Engineering Configuration을 선택하고 Run 버튼을 클릭하면 된다.

Hibernate Perspective

Hibernate Perspective는 해당 Eclipse 프로젝트 내의 Hibernate Mapping XML File 목록을 기반으로 HQL, Criteria 실행 테스트, Hibernate을 통해 생성된 SQL 확인 및 Class vs. Table 매핑 관계 다이어그램 등을 확인할 수 있도록 도와준다.
Eclipse 오른쪽 상단의 를 클릭하여 Hibernate Perspective로 이동한다.

Hibernate Mapping XML 등록

  1. Hibernate Configurations View에서 해당되는 프로젝트를 선택하고 컨텍스트 메뉴에서 Edit Configuration를 선택한다.
  2. Hibernate Configuration 정의를 위한 다이얼로그의 Mappings 탭을 선택하고 해당 프로젝트에서 다룰 Hibernate Mapping XML Files들을 선택하여 추가한 후 OK 버튼을 클릭한다.



  3. 왼쪽에 나타난 Hibernate Configurations View에서 해당되는 프로젝트를 선택하고 컨텍스트 메뉴에서 Rebuild Configuration을 클릭하였을 때, Configuration, Session Factory, Database가 다음 그림과 같이 에러없이 제대로 조회되는지 확인한다.


    hibernate.cfg.xml 또는 추가된 Hibernate Mapping XML 파일에 문제가 있을 경우에는 제대로 조회되지 않는다. 이러한 경우에는 적절한 조치를 취한 뒤 Rebuild Configuration을 클릭하여 문제가 해결되었는지 확인해보도록 하자.

HQL, Criteria Editor 활용

Hibernate Configurations View에서 해당되는 프로젝트를 선택하고 컨텍스트 메뉴에서 HQL Editor 또는 Hibernate Criteria Editor를 클릭하여 HQL Editor나 Criteria Editor로 이동해 보자.
테스트할 HQL/Criteria를 입력하면서 아래 하단의 Hibernate Dynamic SQL View를 통해 어떠한 형태의 SQL문이 생성되는지 즉시 확인할 수 있다. 다음 그림은 HQL Editor에서 "From Category"와 같이 입력하였을 때 Hibernate Dynamic SQL View 통해 확인한 SQL 형태이다.


또한 HQL/Criteria Editor의 왼쪽 상단에 위치한 녹색 세모 버튼 Run HQL을 클릭하면 Hibernate Query Result View를 통해 실행 결과를 확인해 볼 수 있다. 아래 그림에서와 같이 Hibernate를 통해 질의한 결과는 객체 형태로 전달되며 각 객체가 가진 값들은 Properties View를 통해 상세히 확인 가능하다.


HQL/Criteria Editor는 위에서 언급한 Hibernate Dynamic SQL View, Hibernate Query Result View외에도 편리한 질의 생성을 위해 Content Assist 기능을 제공한다.

Mapping Diagram 활용

Hibernate Configurations View에서 해당되는 프로젝트의 Configuration 그룹의 하위 항목을 선택하고 컨텍스트 메뉴에서 Open Mapping Diagram을 선택하면 다음과 같이 해당되는 Persistence Class와 매핑되는 테이블 및 연관 관계에 놓인 다른 Persistence Class들을 다이어그램 형태로 확인 가능하다.


이 외에도 Hibernate Configurations View에서 해당되는 프로젝트의 Configuration 그룹의 하위 항목을 선택하고 컨텍스트 메뉴에서 Open Source File을 클릭하면 해당되는 Persistence Class 소스 파일로 이동할 수 있고, Open Mapping File을 클릭하면 해당되는 Hibernate Mapping XML 파일로 즉시 이동 가능해진다.

Resources

  • 다운로드
  • 이 페이지에서 언급한 Hibernate Tools는 다음의 링크를 통해 Latest Release 버전을 다운로드할 수 있다.
    Name
    Download
    Hibernate Tools
    Download