【问题标题】:Simple 1-N FK relationship woes简单的 1-N FK 关系问题
【发布时间】: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


【解决方案1】:

问题是 PersistenceCapable 和 PrimaryKey 必须要么都通过注释识别,要么都通过元数据识别。我的注释中有 PersistenceCapable,我的 .orm 文件中有 PrimaryKey。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多