【发布时间】:2013-12-14 04:08:27
【问题描述】:
我正在尝试使用 DataNucleus JDO 建立一个简单的 1-N FK 关系。我有类 GridDO 和 GridColumnDO 以及相关的 getter 和 setter。我试图确定一个网格有多个列。 entity_attribute (GridColumn) 表有一个 FK 列(名为 entity_id)到实体 (Grid) 表的 PK(也名为 entity_id)。我在 DataNucleus 网站上使用 the example code 工作。我可以加载 GridDO 对象,但是当我尝试获取列时,我得到了
Iteration request failed : SELECT 'com.mycompany.myapplication.data.GridColumnDO' AS NUCLEUS_TYPE,A0.DISPLAY_NAME,A0.COLUMN_ORDER,A0.PROPERTY_NAME,A0.ENTITY_ID,A0.ENTITY_ATTRIBUTE_ID,A0.VALUE_TYPE FROM ENTITY_ATTRIBUTE A0 WHERE A0.ENTITY_ID = ?
org.datanucleus.exceptions.NucleusDataStoreException: Iteration request failed : SELECT 'com.mycompany.myapplication.data.GridColumnDO' AS NUCLEUS_TYPE,A0.DISPLAY_NAME,A0.COLUMN_ORDER,A0.PROPERTY_NAME,A0.ENTITY_ID,A0.ENTITY_ATTRIBUTE_ID,A0.VALUE_TYPE FROM ENTITY_ATTRIBUTE A0 WHERE A0.ENTITY_ID = ?
...
Caused by: java.sql.SQLException: Parameter #1 has not been set.
有人知道我做错了什么吗?我一直在寻找和敲打这一段时间,没有真正的运气。这是 package-mssql.orm 的摘录:
<class name="GridDO" identity-type="application" table="entity">
<field name="id" primary-key="true">
<column name="entity_id"/>
</field>
<field name="columns">
<collection element-type="com.mycompany.myapplication.data.GridColumnDO"/>
<element column="entity_id"/>
</field>
...
</class>
<class name="GridColumnDO" identity-type="application" table="entity_attribute">
<field name="id" primary-key="true">
<column name="entity_attribute_id"/>
</field>
...
</class>
【问题讨论】:
-
您不能将 GridColumnDO 中的“entity_id”列用于 GridDO 中关系的 FK。根据您引用的文档(您目前没有这样做)映射您的 1-N FK uni 关系。
-
感谢您的回复。如果你告诉我我实际上做错了什么,那将会很有帮助。我一直试图找出我搞砸的东西,但我只是没有看到它。仅供参考,我将编辑帖子,两个表都有一个 entity_id 列。在实体上,它是PK。在 entity_attribute 上,它是 FK。
-
哦,我明白你在说什么。我从 GridColumnDO 表中提取了 gridId 字段。仍然看到同样的问题。我将编辑帖子以反映更新的 ORM 文件。
-
@DataNucleus 另外,我在您的论坛 (datanucleus.org/servlet/forum/viewthread_thread,7642_offset,0) 上发布了一个类似的问题。那个帖子有一个test-jdo的补丁文件,Andy一直跟我来来回回。我不希望你们在同一个问题上重复努力。我希望非官方人士可能有一个想法,这就是我在这里发布的原因。
标签: jdo datanucleus