現在、職場のプロジェクトで WaveMaker を評価していて、外部キー ルックアップの実行で問題が発生しています。WaveMaker 6.7 を実行しており、Oracle Database 10g インスタンスに接続しています。
私のプロジェクトでは、非常にシンプルな「プロジェクト承認」画面を設計しています。WaveMaker の実装では、RequestApproval テーブルに関連付けられた DojoGrid と、その要素に対する CRUD 操作を提供するテーブルで選択された要素に関連付けられた LiveForm で構成される必要があります。
RequestApproval テーブルの各行は、プロジェクトのタスクを表します。このテーブルには、タスクに割り当てられているスタッフ メンバーを示す null 許容の StaffAssigned 列が含まれています。新しいエントリを検証し、データの整合性を維持するために、StaffAssigned 列は Respinit テーブルへの外部キーであり、その主キーはすべてのスタッフ メンバーを定義します。外部キーはデータベースで定義されており、インポート時に WaveMaker はそれに「to-zero-or-one」のカーディナリティを割り当てます (私が思うに、StaffAssigned 列は null 可能であるため)。
私の問題は、Hibernate が関係のマッピングを持っているため、WaveMaker が提供する便利な機能のすべてが利用できるわけではないということです。その外部キーが StaffAssigned 列で定義されている限り、その列は DojoGrid に表示されません。DojoGrid の「列の編集」ダイアログでも、Respinit テーブルの関連する列は選択可能として表示されません。(これは、StaffAssigned が null の場合、WaveMaker が何を表示すればよいか分からないためでしょうか?) デフォルトでは、LiveForm にルックアップ エディターは表示されませんが、パレットからルックアップ エディターをドラッグすると、新しいエディターが自動的に外部キーに関連付けられます。アプリを実行すると、Respinit テーブルの値が自動入力されます。
Hibernate での RequestApproval テーブルの定義は次のとおりです。
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.db105ddb.data.RequestApproval" table="REQUEST_APPROVAL" schema="VRT" dynamic-insert="false" dynamic-update="false">
<id name="requestApprovalId" type="integer">
<column name="REQUEST_APPROVAL_ID" precision="9"/>
<generator class="assigned"/>
</id>
<property name="REQUESTNUM" type="integer">
<column name="REQUESTNUM" precision="8" not-null="true"/>
</property>
<property name="taskDescription" type="string">
<column name="TASK_DESCRIPTION" length="2000"/>
</property>
<property name="whoRequestedApproval" type="string">
<column name="WHO_REQUESTED_APPROVAL" length="6"/>
</property>
<property name="dateRequested" type="date">
<column name="DATE_REQUESTED" length="7"/>
</property>
<property name="dateApproved" type="date">
<column name="DATE_APPROVED" length="7"/>
</property>
<property name="WHO_APPROVED" type="string">
<column name="WHO_APPROVED" length="6"/>
</property>
<many-to-one name="respinitByStaffAssigned" class="com.db105ddb.data.Respinit" cascade="none">
<column name="STAFF_ASSIGNED" length="6"/>
</many-to-one>
</class>
</hibernate-mapping>
Respinit テーブルの定義は次のとおりです。
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.db105ddb.data.Respinit" table="RESPINIT" schema="VRT" dynamic-insert="false" dynamic-update="false">
<id name="respinit" type="string">
<column name="RESPINIT" length="6"/>
<generator class="assigned"/>
</id>
<property name="rname" type="string">
<column name="RNAME" length="40"/>
</property>
<property name="rnameaddr" type="string">
<column name="RNAMEADDR" length="40"/>
</property>
<property name="raddr1" type="string">
<column name="RADDR1" length="40"/>
</property>
<property name="raddr2" type="string">
<column name="RADDR2" length="40"/>
</property>
<property name="rcity" type="string">
<column name="RCITY" length="40"/>
</property>
<property name="rstate" type="string">
<column name="RSTATE" length="20"/>
</property>
<property name="rzip" type="string">
<column name="RZIP" length="20"/>
</property>
<property name="homephone" type="string">
<column name="HOMEPHONE" length="20"/>
</property>
<property name="extension" type="string">
<column name="EXTENSION" length="5"/>
</property>
<property name="department" type="string">
<column name="DEPARTMENT" length="20"/>
</property>
<property name="cgroup" type="string">
<column name="CGROUP" length="10"/>
</property>
<property name="emailaddress" type="string">
<column name="EMAILADDRESS" length="1024"/>
</property>
<set name="requestApprovalsForStaffAssigned" inverse="true" cascade="">
<key>
<column name="STAFF_ASSIGNED" length="6"/>
</key>
<one-to-many class="com.db105ddb.data.RequestApproval"/>
</set>
</class>
</hibernate-mapping>
StaffAssigned 列を DojoGrid に表示したいのですが、そうでない理由がわかりません。Wavemaker で行った他の外部キー ルックアップは、期待どおりに動作します。私の設定で何か間違ったことをしたかどうか誰にもわかりますか? 私のアプローチは何らかの形で非標準ですか? どんな助けでも大歓迎です。リクエストに応じて追加情報を喜んで提供します。