참조:
http://kwon37xi.springnote.com/pages/2275410
http://mojo.codehaus.org/maven-hibernate3/hibernate3-maven-plugin/componentproperties.html

1. 메이븐 pom.xml 에 플러그인 추가하기

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>hibernate3-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <componentProperties>
                        <drop>false</drop>
                        <create>true</create>
                        <format>true</format>
                        <export>false</export>
                        <jdk5>true</jdk5>
                        <outputfilename>schema.ddl</outputfilename>
                        <configurationfile>src/hibernate.cfg.xml</configurationfile>
                        <propertyfile>database.properties</propertyfile>
                    </componentProperties>
                    <components>
                        <component>
                            <name>hbm2ddl</name>
                            <implementation>annotationconfiguration</implementation>
                        </component>
                    </components>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                        <version>8.2-507.jdbc3</version>
                    </dependency>
                </dependencies>
            </plugin>

굵은 글씨 부분은 사용하시는 프로젝트에 맞게 변경해야 할 부분입니다.

일단, 구조를 보면 configuration에 크게 두가지가 들어있는데, 하나는 component들을 담고 있는 components이고, 다른 건 componentProperties입니다. 제가 사용하려는건 hbm2ddl이기 때문에 hbm2ddl 컴포넌트만 등록해 두었습니다. 그와 관련된 설정은 componentProperties여기에 들어있죠.

먼저, drop은 기존의 DB의 테이블 들을 깔끔하게 날려버릴 sql을 만들지 여부를 나타냅니다. 기본 값은 false기 때문에 위와 같은 설정에서는 생략해도 됩니다.

create는 뭔지 아시겠죠? 패스. 기본값은 true입니다.

format은 보기 좋은 형태로 SQL 출력 형태를 다듬어 줍니다. 기본 값은 false입니다.

export는 현재 DB에 적용을 할꺼냐는 건데.. 위험하기 때문에 일단은 false가 좋겠습니다. 그런데 기본값은 true입니다. 하지만, DB 마이그레이션 자동화가 되어있다면 true로 놓고 매번 DB 스키마를 새롭게 업데이트 한 다음 백업했던 데이터를 채워주면 되겠습니다.

jdk5는 역시 패스. 기본값은 false입니다.

outputfilename는 ddl을 출력할 파일 이름인데, 이 파일은 프로젝트/target/hibernate3/sql 밑에 생깁니다.

configurationfile는 하이버네이트 설정 파일 위치를 알려줍니다.

propertyfile는 하이버네이트가 DB에 접근할 때 필요한 프로퍼티를 가지고 있는 파일 위치를 알려줍니다.

2. 하이버네이트 설정 파일 만들기

<!DOCTYPE hibernate-configuration SYSTEM
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <mapping class="springsprout.domain.Member" />
        <mapping class="springsprout.domain.Comment" />
        <mapping class="springsprout.domain.Resource" />
        <mapping class="springsprout.domain.Right" />
        <mapping class="springsprout.domain.Role" />
        <mapping class="springsprout.domain.wiki.Histories" />
        <mapping class="springsprout.domain.wiki.History" />
        <mapping class="springsprout.domain.wiki.WikiDocument" />
        <mapping class="springsprout.domain.study.Study" />
        <mapping class="springsprout.domain.study.Presentation" />
        <mapping class="springsprout.domain.study.Meeting" />
        <mapping class="springsprout.domain.study.Attendance" />
        <mapping class="springsprout.domain.seminar.Seminar" />
        <mapping class="springsprout.domain.seminar.SeminarComer" />
        <mapping class="springsprout.domain.notice.Notice" />
        <mapping class="springsprout.domain.main.Graffiti" />
        <mapping class="springsprout.domain.file.UploadFile" />
    </session-factory>
</hibernate-configuration>

애노테이션기반으로 설정한 경우에는 위와 같이 애노테이션으로 맵핑한 클래스들을 알려줍니다.

3. 하이버네이트 프로퍼티 추가하기

hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.username=***
hibernate.connection.password=***
hibernate.connection.driver_class=org.postgresql.Driver
hibernate.connection.url=***

이런 설정을 프로퍼티 파일에 추가하거나 새로운 프로퍼티 파일을 만들어서 추가해줍니다.

끝!!!

이제 hbm2ddl 골을 실행할 수 있습니다.

제가 원한건 새로운 스키마용 ddl이 아니라, 기본 DB에서 수정할 것들만 알려주는 수정용 ddl인데 어떻게 설정해야 되는지 잘 모르겠군요. 그런 기능을 지원해주는 건지 아닌지도 몰겠고.. componentProperties를 보면 update 속성이 있긴한데, 이 녀석에 true를 줘버리면 ddl 자체가 안 만들어집니다. @_@;;