0

リポジトリとリポジトリにemployee2つのテーブルがあるという要件があります。ABCaddress_detailsXYZ

の 1 つの列にemployeeへの外部キー参照がありaddress_detailsます。

ここでは、primaryKeyfor がaddress_detailsあり、そのprimaryKey 参照を使用して、データを に挿入する必要がありemployeeます。

したがって、私のRDFは次のようになります。

RDF 1: (リポジトリ 1 : ABC)

<item-descriptor name=”employee” >
 <table name=”employee”&gt;
   <property name=”empId” data-type=”string” column-name=”emp_id”
     required=”true”/>
   <property name=”address” column-name=”address_id” item-type=”address”
     repository=”XYZ” required=”true”/>
 </table>
</item-descriptor>

RDF 2: (リポジトリ 2 : XYZ)

<item-descriptor name=”address” >
  <table name=”address_details”&gt;
    <property name=”addressId” data-type=”string” column-name=”address_id”/>
    <property name=”streetName” column-name=”street_name” data-type=”string”/>
    <property name=”city” column-name=”city” data-type=”string” />
  </table>
</item-descriptor>

すべてのアドレスが table に格納されていますaddress_detailsemployeeそして、これらのアドレスにマップする必要があります。

ここで試している方法は、最初にRepostoryItemofをフェッチしAddress 、次にプロパティ タイプaddressを設定してテーブルemployeeに追加することです。employeeこれは機能します。

employeeしかし、1回の呼び出しだけでデータを挿入したいですか?

またはを使用してそれを行う方法について何か提案はありますRepositoryItemMutableRepositoryItem?

4

1 に答える 1

0

1回の呼び出しで挿入するということは、すべての挿入をアトミックにコミットしたいという意味だと思います。1 つの SQL ステートメントで複数の挿入を行うメカニズムはありません。作成したアイテムごとに MutableRepository.addItem() を 1 回呼び出す必要があります。次のコードを使用すると、リポジトリの作業をトランザクションでラップできるため、データがすべて一度にコミットされます。

TransactionManager tm = ...
TransactionDemarcation td = new TransactionDemarcation ();
try {
  try {
    td.begin(tm);

    // Create all items and call MutableRepository.addItem() for each of them.
  }
  finally {
    td.end();
  }
}
catch (TransactionDemarcationException exc) {
  logError(exc);
}
于 2012-11-28T17:04:03.913 に答える