Hibernateプロファイルのマッピング要素の詳細


原文転送ゲート:http://www.zhujiangroad.com/html/soft/s10604.html
 
    象関係のマッピングはXMLドキュメントで説明されています.マッピングドキュメントは、XDoclet、Middlegen、AndroMDAなどのツールを使用して生成できます.次に、マッピングの例からマッピング要素について説明します.マッピングファイルのコードは次のとおりです.

<?xml version="1.0"?>

<!--

XML DOCTYPE。

Hibernate (classptah) DTD 。

-->

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

hibernate-mapping :

schema schema 。

default-cascade none、save、update。

auto-import true、false。

package 。

-->

<hibernate-mapping schema="schemaName" default-cascade="none"

auto-import="true" package="test">

<!-- class -->

<class name="People" table="person">

<!-- id 。-->

<id name="id">

<!-- -->

<generator class="native"/>

</id>

<!-- discriminator -->

<discriminator column="subclass" type="character"/>

<!-- property ,JavaBean -->

<property name="name" type="string">

<column name="name" length="64" not-null="true" />

</property>

<property name="sex"

not-null="true"

update="false"/>

<!-- -->

<many-to-one name="friend"

column="friend_id"

update="false"/>

<!-- -->

<set name="friends" inverse="true" order-by="id">

<key column="friend_id"/>

<!— -->

<one-to-many class="Cat"/>

</set>

</class>

</hibernate-mapping>


コンポーネントの適用方法
コンポーネントには、コンポーネント(component)とダイナミックコンポーネント(dynamic-component)の2種類があります.コンフィギュレーションファイルでは、component要素はサブオブジェクトの要素と親対応テーブルのフィールドとマッピング関係を確立します.コンポーネントは、独自のプロパティ、コンポーネント、またはコレクションを宣言できます.component要素の定義は次のとおりです.

<component name="propertyName" class="className" insert="true|false"

upate="true|false" access="field|property|ClassName">

<property ...http://www.zhujiangroad.com/>

<many-to-one .... />

........

</component>


このコードでは、nameは属性名、classはクラスの名前、insertはマッピングされたフィールドがSQLのINSERT文に表示されるかどうか、upateはマッピングされたフィールドがSQLのUPDATE文に表示されるかどうか、accessはアクセス属性のポリシーを示す.
Hiebernateの基本構成
Hibernateのデータベース接続情報は、プロファイルからロードされます.Hibernateのプロファイルには、XML形式のファイルとpropertiesプロパティファイルの2つの形式があります.properties形式のプロファイルのデフォルトファイル名はhibernate.propertiesで、1つのproperties形式のプロファイルの内容は以下の通りです.

#

hibernate.connection.driver_class = com.mysql.jdbc.Driver r

#

hibernate.connection.url = jdbc:mysql://localhost:3306/db

#

hibernate.connection.username = user

#

hibernate.connection.password = password

#

hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect

# SQL

hibernate.show_sql=true


プロファイルには一連のプロパティの構成が含まれており、Hibernateはこれらのプロパティに基づいてデータベースに接続します.
XML形式のプロファイルでは、基本的なHibernateプロファイル情報に加えて、特定の永続化クラスのマッピングファイルを指定できます.これにより、永続化クラスのプロファイルをプログラムにハードコーディングすることを回避できます.XML形式のプロファイルのデフォルトファイル名はhibernate.cfg.xmlで、XMLプロファイルの例は以下の通りです.

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- SQL -->

<property name="show_sql">true</property>

<!-- -->

<property name="connection.url">jdbc:mysql://localhost:3306/STU</property>

<!-- -->

<property name="connection.username">root</property>

<!-- -->

<property name="connection.password">root</property>

<!-- -->

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<!-- -->

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- -->

<mapping resource="com/stuman/domain/Admin.hbm.xml" />

<!-- -->

<mapping resource="com/stuman/domain/Student.hbm.xml" />

</session-factory>

</hibernate-configuration>


properties形式のプロファイルとXML形式のプロファイルを同時に使用できます.2種類のプロファイルを同時に使用すると、XMLプロファイルの設定はpropertiesプロファイルの同じプロパティを上書きします.
オブジェクトID記号
リレーショナル・データベース・テーブルでは、プライマリ・キー(Primary Key)を使用してレコードを識別し、各レコードの一意性を保証します.Java言語では、2つの変数が参照するオブジェクトのメモリアドレスが同じかどうか、または2つの変数が参照するオブジェクトの値が同じかどうかを比較することで、2つのオブジェクトが等しいかどうかを判断します.Hibernateは両者の違いを解決するためにオブジェクト識別子(OID)を用いてオブジェクトの一意性を識別する.OIDは、リレーショナル・データベース内のJavaオブジェクト・モデルにおけるプライマリ・キーの等価物です.実行時、HibernateはOIDに基づいてJavaオブジェクトとデータベーステーブルに記録された対応関係を維持する.次のコードに示すように,Sessionのload()メソッドを3回呼び出し,それぞれOIDが1または3のUserオブジェクトをロードする.

Transaction tx = session.beginTransaction();

User user1 = (User)session.load(User.class,new Long(1));

User user2 = (User)session.load(User.class,new Long(1));

User user3 = (User)session.load(User.class,new Long(3));

System.out.println( user1 == user2 );

System.out.println( user1 == user3 );


アプリケーションは、上記のコードを実行する際に、OIDが1のUserオブジェクトを初めてロードし、データベースからIDが1のレコードを検索し、対応するUserインスタンスを作成してSessionキャッシュに保存し、最後にそのインスタンスの参照を変数user 1に付与する.OIDが1のオブジェクトを2回目にロードすると、SessionキャッシュのOIDが1のインスタンスの参照を変数user 2に直接割り当てます.したがって、式user 1=user 2の結果はtrueとなる.
識別子の生成には異なるポリシーを用いることができ,表1はHibernateに組み込まれた識別子生成ポリシーである.
表1:Hibernate ID生成ポリシー
識別子ビルダー
説明
increment
プロキシ・プライマリ・キーに適用されます.Hibernateによって自動的にインクリメンタルに生成されます.
identity
プロキシ・プライマリ・キーに適用されます.下位データベースから識別子を生成します.
sequence
プロキシ・プライマリ・キーに適用されます.Hibernateは、下位データベースのシーケンスに基づいて識別子を生成します.これには、下位データベースがシーケンスをサポートする必要があります.
hilo
プロキシ・プライマリ・キーに適用されます.Hibernate支局high/lowアルゴリズムは識別子を生成する.
seqhilo
プロキシ・プライマリ・キーに適用されます.高/低位アルゴリズムを用いてlong,shortまたはintタイプの識別子を効率的に生成する.
native
プロキシ・プライマリ・キーに適用されます.下位データベースの識別子を自動的に生成する方法に従って、identity、sequence、hiloを自動的に選択します.
uuid.hex
プロキシ・プライマリ・キーに適用されます.Hibernateは128ビットのUUIDアルゴリズムを用いて識別子を生成する.
uuid.string
プロキシ・プライマリ・キーに適用されます.UUIDは16文字長の文字列に符号化される.
assigned
ナチュラルプライマリ・キーに適用されます.Javaアプリケーションが識別子の生成を担当します.
foreign
プロキシ・プライマリ・キーに適用されます.別の関連オブジェクトの識別子を使用します.
Hibernateマッピングタイプ
オブジェクト/リレーションシップマッピングファイルでは、HibernateはJavaタイプとSQLタイプの橋渡しとしてマッピングタイプを使用します.Hibernateマッピングタイプは、組み込みマッピングタイプとカスタムマッピングタイプの2種類に分けられます.
1、組み込みマッピングタイプ
Hibernateは、すべてのJavaオリジナルタイプ、String、Dateなどの一般的なJavaタイプに組み込まれたマッピングタイプを定義します.表2に、Hibernateマッピングタイプ、対応するJavaタイプ、および対応する標準SQLタイプを示す.
表2:Hibernate内蔵マッピングタイプ
Hibernateマッピングタイプ
Javaタイプ
標準SQLタイプ
サイズ
integer/int
java.lang.Integer/int
INTEGER
4バイト
long
java.lang.Long/long
BIGINT
8バイト
short
java.lang.Short/short
SMALLINT
2バイト
byte
java.lang.Byte/byte
TINYINT
1バイト
float
java.lang.Float/float
FLOAT
4バイト
double
java.lang.Double/double
DOUBLE
8バイト
big_decimal
java.math.BigDecimal
NUMERIC
 
character
java.lang.Character/java.lang.String/char
CHAR(1)
ていちょうもじ
string
java.lang.String
VARCHAR
のびもじ
boolean/yes_no/true_false
java.lang.Boolean/Boolean
BIT
ブール型
date
java.util.Date/java.sql.Date
DATE
日付
timestamp
java.util.Date/java.util.Timestamp
TIMESTAMP
日付
calendar
java.util.Calendar
TIMESTAMP
日付
calendar_date
java.util.Calendar
DATE
日付
binary
byte[]
BLOB
BLOB
text
java.lang.String
TEXT
CLOB
serializable
Java.io.Serializablejインタフェースを実装する任意のJavaクラス
BLOB
BLOB
clob
java.sql.Clob
CLOB
CLOB
blob
java.sql.Blob
BLOB
BLOB
class
java.lang.Class
VARCHAR
ていちょうもじ
locale
java.util.Locale
VARCHAR
ていちょうもじ
timezone
java.util.TimeZone
VARCHAR
ていちょうもじ
currency
java.util.Currency
VARCHAR
ていちょうもじ
2、カスタムマッピングタイプ
Hibernateは、カスタムマッピングタイプインタフェースを提供し、ユーザーがプログラミングでカスタムマッピングタイプを作成できるようにします.ユーザがカスタマイズしたマッピングタイプは、net.sf.hibernate.UserTypeまたはnet.sf.hibernate.CompositeUserTypeインタフェースを実装する必要があります.カスタムマッピングタイプを作成する方法については、hibernateの公式ドキュメントまたは関連資料を参照してください.ここでは詳しく説明しません.