Hibernate.orgCommunity Documentation
Roundtrip engineering with Hibernate is possible using a set of Eclipse plugins, commandline tools, and Ant tasks.
Hibernate Tools currently include plugins for the Eclipse IDE as well as Ant tasks for reverse engineering of existing databases:
Mapping Editor: an editor for Hibernate XML mapping files that supports auto-completion and syntax highlighting. It also supports semantic auto-completion for class names and property/field names, making it more versatile than a normal XML editor.
Console: the console is a new view in Eclipse. In addition to a tree overview of your console configurations, you are also provided with an interactive view of your persistent classes and their relationships. The console allows you to execute HQL queries against your database and browse the result directly in Eclipse.
Development Wizards: several wizards are provided with the Hibernate Eclipse tools. You can use a wizard to quickly generate Hibernate configuration (cfg.xml) files, or to reverse engineer an existing database schema into POJO source files and Hibernate mapping files. The reverse engineering wizard supports customizable templates.
Please refer to the Hibernate Tools package documentation for more information.
However, the Hibernate main package comes bundled with an integrated tool : SchemaExport aka hbm2ddl
.It can even be used from "inside" Hibernate.
DDL can be generated from your mapping files by a Hibernate utility. The generated schema includes referential integrity constraints, primary and foreign keys, for entity and collection tables. Tables and sequences are also created for mapped identifier generators.
You must specify a SQL Dialect
via the hibernate.dialect
property when using this tool, as DDL is highly vendor-specific.
First, you must customize your mapping files to improve the generated schema. The next section covers schema customization.
Many Hibernate mapping elements define optional attributes named length
, precision
and scale
. You can set the length, precision and scale of a column with this attribute.
<property name="zip" length="5"/>
<property name="balance" precision="12" scale="2"/>
Some tags also accept a not-null
attribute for generating a NOT NULL
constraint on table columns, and a unique
attribute for generating UNIQUE
constraint on table columns.
<many-to-one name="bar" column="barId" not-null="true"/>
<element column="serialNumber" type="long" not-null="true" unique="true"/>
A unique-key
attribute can be used to group columns in a single, unique key constraint. Currently, the specified value of the unique-key
attribute is not used to name the constraint in the generated DDL. It is only used to group the columns in the mapping file.
<many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/> <property name="employeeId" unique-key="OrgEmployee"/>
An index
attribute specifies the name of an index that will be created using the mapped column or columns. Multiple columns can be grouped into the same index by simply specifying the same index name.
<property name="lastName" index="CustName"/> <property name="firstName" index="CustName"/>
A foreign-key
attribute can be used to override the name of any generated foreign key constraint.
<many-to-one name="bar" column="barId" foreign-key="FKFooBar"/>
많은 매핑 요소들은 또한 하나의 자식 <column>
요소를 허용한다. 이것은 특히 다중 컬럼 타입들을 매핑하는데 유용하다:
<property name="name" type="my.customtypes.Name"/> <column name="last" not-null="true" index="bar_idx" length="30"/> <column name="first" not-null="true" index="bar_idx" length="20"/> <column name="initial"/> </property>
The default
attribute allows you to specify a default value for a column.You should assign the same value to the mapped property before saving a new instance of the mapped class.
<property name="credits" type="integer" insert="false"> <column name="credits" default="10"/> </property>
<version name="version" type="integer" insert="false"> <column name="version" default="0"/> </property>
sql-type
속성은 SQL 데이터타입에 대한 Hibernate 타입의 디폴트 매핑을 오버라이드 시키는 것을 사용자에게 허용해준다.
<property name="balance" type="float"> <column name="balance" sql-type="decimal(13,3)"/> </property>
check
속성은 check 컨스트레인트를 지정하는 것을 당신에게 허용해준다.
<property name="foo" type="integer"> <column name="foo" check="foo > 10"/> </property>
<class name="Foo" table="foos" check="bar < 100.0"> ... <property name="bar" type="float"/> </class>
The following table summarizes these optional attributes.
표 20.1. 요약
속성 | 값들 | 해석 |
---|---|---|
length | number | 컬럼 길이 |
precision | number | 컬럼 decimal 정밀도 |
scale | number | 컬럼 decimal 크기 |
not-null | true|false | specifies that the column should be non-nullable |
unique | true|false | 컬럼이 하나의 유일 컨스트레인트를 가져야함을 지정한다 |
index | index_name | (다중-컬럼) 인덱스의 이름을 지정한다 |
unique-key | unique_key_name | 다중-컬럼 유일 컨스트레인트의 이름을 지정한다 |
foreign-key | foreign_key_name | specifies the name of the foreign key constraint generated for an association, for a <one-to-one> , <many-to-one> , <key> , or <many-to-many> mapping element. Note that inverse="true" sides will not be considered by SchemaExport . |
sql-type | SQL column type | overrides the default column type (attribute of <column> element only) |
default | SQL expression | 컬럼에 대한 디폴트 값을 지정한다 |
check | SQL expression | 컬럼 또는 테이블에 대한 SQL check 컨스트레인트를 생성시킨다 |
<comment>
요소는 생성된 스키마에 대한 주석들을 지정하는 것을 당신에게 허용해준다.
<class name="Customer" table="CurCust"> <comment>Current customers only</comment> ... </class>
<property name="balance"> <column name="bal"> <comment>Balance in USD</comment> </column> </property>
This results in a comment on table
or comment on column
statement in the generated DDL where supported.
SchemaExport
도구는 DDL 스크립트를 표준 출력으로 기록 하고/하거나 DDL 문장들을 실행시킨다.
The following table displays the SchemaExport
command line options
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaExport
options mapping_files
표 20.2. SchemaExport
명령 라인 옵션들
옵션 | 설명 |
---|---|
--quiet | do not output the script to stdout |
--drop | 오직 테이블들을 드롭시킨다 |
--create | 오직 테이블들을 생성시킨다 |
--text | do not export to the database |
--output=my_schema.ddl | ddl 스크립트를 파일로 출력한다 |
--naming=eg.MyNamingStrategy | select a NamingStrategy |
--config=hibernate.cfg.xml | XML 파일로부터 Hibernate 구성을 읽어들인다 |
--properties=hibernate.properties | read database properties from a file |
--format | 생성된 SQL을 스크립트 내에 좋게 형식지운다 |
--delimiter=; | 스크립트를 위한 라인 경계의 끝을 설정한다 |
You can even embed SchemaExport
in your application:
Configuration cfg = ....; new SchemaExport(cfg).create(false, true);
Database properties can be specified:
-D
<property>를 가진 시스템 프로퍼티로서
hibernate.properties
내에서
--properties
를 가진 명명된 프로퍼티들 내에서
필요한 프로퍼티들은 다음과 같다:
표 20.3. SchemaExport 커넥션 프로퍼티들
프로퍼티 이름 | 설명 |
---|---|
hibernate.connection.driver_class | jdbc 드라이버 클래스 |
hibernate.connection.url | jdbc url |
hibernate.connection.username | 데이터베이스 사용자 |
hibernate.connection.password | 사용자 패스워드 |
hibernate.dialect | dialect |
당신은 당신의 Ant 빌드 스크립트에서 SchemaExport
를 호출할 수 있다:
<target name="schemaexport"> <taskdef name="schemaexport" classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" classpathref="class.path"/> <schemaexport properties="hibernate.properties" quiet="no" text="no" drop="no" delimiter=";" output="schema-export.sql"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemaexport> </target>
The SchemaUpdate
tool will update an existing schema with "incremental" changes. The SchemaUpdate
depends upon the JDBC metadata API and, as such, will not work with all JDBC drivers.
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaUpdate
options mapping_files
표 20.4. SchemaUpdate
명령 라인 옵션들
옵션 | 설명 |
---|---|
--quiet | do not output the script to stdout |
--text | do not export the script to the database |
--naming=eg.MyNamingStrategy | select a NamingStrategy |
--properties=hibernate.properties | read database properties from a file |
--config=hibernate.cfg.xml | specify a .cfg.xml file |
You can embed SchemaUpdate
in your application:
Configuration cfg = ....; new SchemaUpdate(cfg).execute(false);
당신은 Ant 스크립트에서SchemaUpdate
를 호출할 수 있다:
<target name="schemaupdate"> <taskdef name="schemaupdate" classname="org.hibernate.tool.hbm2ddl.SchemaUpdateTask" classpathref="class.path"/> <schemaupdate properties="hibernate.properties" quiet="no"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemaupdate> </target>
The SchemaValidator
tool will validate that the existing database schema "matches" your mapping documents. The SchemaValidator
depends heavily upon the JDBC metadata API and, as such, will not work with all JDBC drivers. This tool is extremely useful for testing.
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaValidator
options mapping_files
표 20.5. SchemaValidator
명령 라인 옵션들
옵션 | 설명 |
---|---|
--naming=eg.MyNamingStrategy | select a NamingStrategy |
--properties=hibernate.properties | read database properties from a file |
--config=hibernate.cfg.xml | specify a .cfg.xml file |
You can embed SchemaValidator
in your application:
Configuration cfg = ....; new SchemaValidator(cfg).validate();
당신은 Ant 스크립트에서 SchemaValidator
를 호출할 수 있다:
<target name="schemavalidate"> <taskdef name="schemavalidator" classname="org.hibernate.tool.hbm2ddl.SchemaValidatorTask" classpathref="class.path"/> <schemavalidator properties="hibernate.properties"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemavalidator> </target>
저작권 © 2004 Red Hat Middleware, LLC.