Hibernate 宛先の使用

Hibernate アセンブラは、Java アダプタと一緒に使用することによって Hibernate オブジェクトリレーショナルマッピングシステムへのブリッジを提供する、特別な Java アセンブラクラスです。Hibernate アセンブラでは Hibernate 3.0 以降がサポートされています。このアセンブラを使用すると、既存の Hibernate バックエンドと統合するために必要な、データ管理に固有の Java コードを記述する必要がなくなります。代わりに、Hibernate の XML ベースのマッピングファイルと設定ファイルを設定し、それからそれらのファイルを参照する Data Management Service 宛先を設定します。Hibernate アセンブラは実行時に Hibernate 設定ファイルを使用し、Hibernate API を使用することによってデータ変更をリレーショナルデータベースに永続化します。Hibernate の処理はアセンブラの中にカプセル化されます。Hibernate の設定内の関連付けは、Flex の宛先定義内の関連付けとしてミラーリングしてください。

Data Management Service の count、get、create、update、delete の各メソッドはすべて、同様の名前と動作を持つ Hibernate 処理に対応しており、Hibernate マッピングファイル内の設定以外の設定は必要ありません。ただし、Hibernate のオブジェクト取得メソッドは洗練されており、Data Management Service の fill メソッドを Hibernate のいずれかのオブジェクト取得メソッドにマップする場合は追加の設定を含める必要があります。

次の例は、Hibernate アセンブラを使用する宛先です。この HibernatePerson 宛先は HibernateGroup 宛先との多対 1 関係を持っています。

...
<destination id="HibernatePerson" channels="rtmp-ac">
    <adapter ref="java-adapter" />
    <properties>
        <source>flex.data.assemblers.HibernateAssembler</source>
        <scope>application</scope>
        <metadata>
            <identity property="id"/>
            <many-to-one property="group"
                destination="HibernateGroup" lazy="true"/> 
            </metadata>        <network>
            <paging enabled="true" pageSize="10" />
            <throttle-inbound policy="ERROR" max-frequency="500"/>
            <throttle-outbound policy="REPLACE" max-frequency="500"/>
        </network>
        <server>
            <!-- このエレメントが存在しない場合、アダプタでは Hibernate エンティティが
            宛先 ID と同じ名前を持っているものと見なされます。
            -->
            <hibernate-entity>contacts.hibernate.Person</hibernate-entity>
            <!-- 競合モードによって、競合が 1 つでもあるかどうかを調べ、競合がある場合は、
            変更されたプロパティだけを調べるか、クライアントがオブジェクト全体の
            正しいデータを持っていたことを検証するかどうかが決まります。
            update-conflict-mode に対する有効な値は、NONE、PROPERTY、および OBJECT です。
            delete-conflict-mode に対する有効な値は、NONE および OBJECT です。
            -->
            <update-conflict-mode>PROPERTY</update-conflict-mode>
            <delete-conflict-mode>OBJECT</delete-conflict-mode>
            <fill-configuration>
                <use-query-cache>false</use-query-cache>
                <allow-hql-queries>true</allow-hql-queries>
            </fill-configuration>
        </server>
    </properties>
</destination>

次の例は、HibernatePerson 宛先と HibernateGroup 宛先を操作するための、対応する ActionScript メソッドです。

...
private function createDataCollection():void {
    groupDS = new DataService("HibernateGroup");
    groupDS.addEventListener(MessageFaultEvent.FAULT, faultHandler);
    groupDS.addEventListener(MessageEvent.RESULT, resultHandler);
    groupDS.addEventListener(DataConflictEvent.CONFLICT, conflictHandler);
    groupDS.autoCommit = false;
    personDS = new DataService("HibernatePerson");
    personDS.autoCommit = false;
    personDS.fill(allPersons,"flex:hql","From Person where groupId is null");
    groupDS.fill(groups1,"flex:hql","From Group");
    personDS.dataStore = groupDS.dataStore;
}
...

サブトピック

サポートされている Hibernate 機能
Hibernate 設定ファイル
設定ファイルの設定

Flex 2.01