我目前正在评估WaveMaker的工作项目,并且在执行外键查找时遇到问题。我正在运行WaveMaker 6.7并连接到Oracle数据库10g实例。
我的项目涉及设计一个非常简单的项目批准"屏幕。在WaveMaker的实现中,它应该包含一个与RequestApproval表关联的DojoGrid和一个与表中所选元素相关联的LiveForm,为该元素提供CRUD操作。
RequestApproval表中的每一行代表一个项目中的任务。该表包含一个可空的StaffAssigned列,该列指示将哪个工作人员分配给任务。为了验证新条目并保持数据完整性,StaffAssigned列是Respinit表中的外键,其主键定义所有工作人员。外键在数据库中定义,并且在导入时,WaveMaker会为其指定一个基数为“零到一”的基数。 (因为,我认为,StaffAssigned列可以为空)。
我的问题是WaveMaker现在不应该为我提供所有便利,Hibernate有关系的映射。只要在StaffAssigned列上定义了该外键,该列就不会出现在DojoGrid中。 Respinit表中的任何关联列都不会显示为"编辑列" DojoGrid的对话框。 (也许这是因为当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的其他外键查找工作正如预期的那样。任何人都可以告诉我在配置中是否做错了什么?我的方法在某种程度上是非标准的吗?我们将非常感谢您的帮助,我很乐意根据您的要求提供任何其他信息。
答案 0 :(得分:1)
我在他们的文档中找到了答案。如果需要查看/编辑相关数据,则必须使用LiveView而不是LiveTable。 Here's a link到Wayback Machine的相关文档存档,因为他们的网站整周都在关闭。