1

我目前正在为工作中的项目评估 WaveMaker,并且在执行外键查找时遇到了麻烦。我正在运行 WaveMaker 6.7 并连接到 Oracle 数据库 10g 实例。

我的项目涉及设计一个非常简单的“项目批准”屏幕。在 WaveMaker 的实现中,它应该包含一个与 RequestApproval 表相关联的 DojoGrid 和一个与表中的选定元素相关联的 LiveForm,该元素提供对该元素的 CRUD 操作。

RequestApproval 表中的每一行代表项目中的一个任务。该表包括一个可为空的 StaffAssigned 列,该列指示将哪个员工分配给任务。为了验证新条目并保持数据完整性,StaffAssigned 列是 Respinit 表的外键,其主键定义了所有员工。外键是在数据库中定义的,并且在导入 WaveMaker 时为其分配了一个“零或一”的基数(因为我认为 StaffAssigned 列可以为空)。

我的问题是,并不是 WaveMaker 应该为我提供的所有便利,因为 Hibernate 有一个关系映射可供我使用。只要在 StaffAssigned 列上定义了该外键,该列就不会出现在 DojoGrid 中。在 DojoGrid 的“编辑列”对话框中,Respinit 表中的所有关联列都不是可选的。(也许这是因为当 StaffAssigned 为空时 WaveMaker 不知道要显示什么?)LiveForm 中默认不显示查找编辑器,但是当我从 Pallete 中拖动一个时,新编辑器会自动与外键关联,并且会当我运行我的应用程序时,自动填充来自 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 完成的其他外键查找按预期工作。谁能告诉我我的配置是否做错了什么?我的方法在某种程度上是非标准的吗?任何帮助将不胜感激,我很乐意应要求提供任何其他信息。

4

1 回答 1

1

我在他们的文档中找到了答案。如果需要查看/编辑相关数据,则必须使用 LiveView 而不是 LiveTable。这是Wayback Machine 的相关文档存档的链接,因为他们的网站已经关闭了一周。

于 2015-05-19T21:32:13.743 回答