WaveMaker 6.7 中的外键查找
Foreign Key Lookup in WaveMaker 6.7
我目前正在为一个工作项目评估 WaveMaker,但在执行外键查找时遇到了问题。我正在 运行ning WaveMaker 6.7 并连接到 Oracle 数据库 10g 实例。
我的项目涉及设计一个非常简单的 "Project Approval" 屏幕。在 WaveMaker 的实现中,它应该包含一个与 RequestApproval table 关联的 DojoGrid 和一个与 table 中选定元素关联的 LiveForm,提供对该元素的 CRUD 操作。
RequestApproval table 中的每一行代表项目中的一个任务。 table 包含一个可以为 null 的 StaffAssigned 列,该列指示分配给任务的职员。为了验证新条目并保持数据完整性,StaffAssigned 列是 Respinit table 的外键,其主键定义了所有员工。外键在数据库中定义,导入时 WaveMaker 为其分配基数 "to-zero-or-one"(因为我认为 StaffAssigned 列可以为空)。
我的问题是,由于 Hibernate 具有关系的映射,我无法使用 WaveMaker 应该为我提供的所有便利。只要在 StaffAssigned 列上定义了该外键,该列就不会出现在 DojoGrid 中。来自 Respinit table 的关联列的 None 在 DojoGrid 的 "Edit columns" 对话框中显示为 selectable。 (也许这是因为当 StaffAssigned 为 null 时 WaveMaker 不知道要显示什么?)LiveForm 中默认不显示 Lookup 编辑器,但是当我从 Pallete 中拖出一个时,新编辑器会自动与外键关联并将当我 运行 我的应用
时,自动填充来自 Respinit table 的值
这是 Hibernate 中 RequestApproval table 的定义:
<!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 的定义 table:
<!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 完成的其他外键查找按预期工作。谁能告诉我是否在我的配置中做错了什么?我的方法在某种程度上是非标准的吗?任何帮助将不胜感激,我将很乐意根据要求提供任何其他信息。
我在他们的文档中找到了答案。如果需要 view/edit 相关数据,则必须使用 LiveView 而不是 LiveTable。 Here's a link 到 Wayback Machine 的相关文档存档,因为他们的网站整个星期都关闭了。
我目前正在为一个工作项目评估 WaveMaker,但在执行外键查找时遇到了问题。我正在 运行ning WaveMaker 6.7 并连接到 Oracle 数据库 10g 实例。
我的项目涉及设计一个非常简单的 "Project Approval" 屏幕。在 WaveMaker 的实现中,它应该包含一个与 RequestApproval table 关联的 DojoGrid 和一个与 table 中选定元素关联的 LiveForm,提供对该元素的 CRUD 操作。
RequestApproval table 中的每一行代表项目中的一个任务。 table 包含一个可以为 null 的 StaffAssigned 列,该列指示分配给任务的职员。为了验证新条目并保持数据完整性,StaffAssigned 列是 Respinit table 的外键,其主键定义了所有员工。外键在数据库中定义,导入时 WaveMaker 为其分配基数 "to-zero-or-one"(因为我认为 StaffAssigned 列可以为空)。
我的问题是,由于 Hibernate 具有关系的映射,我无法使用 WaveMaker 应该为我提供的所有便利。只要在 StaffAssigned 列上定义了该外键,该列就不会出现在 DojoGrid 中。来自 Respinit table 的关联列的 None 在 DojoGrid 的 "Edit columns" 对话框中显示为 selectable。 (也许这是因为当 StaffAssigned 为 null 时 WaveMaker 不知道要显示什么?)LiveForm 中默认不显示 Lookup 编辑器,但是当我从 Pallete 中拖出一个时,新编辑器会自动与外键关联并将当我 运行 我的应用
时,自动填充来自 Respinit table 的值这是 Hibernate 中 RequestApproval table 的定义:
<!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 的定义 table:
<!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 完成的其他外键查找按预期工作。谁能告诉我是否在我的配置中做错了什么?我的方法在某种程度上是非标准的吗?任何帮助将不胜感激,我将很乐意根据要求提供任何其他信息。
我在他们的文档中找到了答案。如果需要 view/edit 相关数据,则必须使用 LiveView 而不是 LiveTable。 Here's a link 到 Wayback Machine 的相关文档存档,因为他们的网站整个星期都关闭了。