如何使用JDO API通过一次数据库调用获取持久对象的图形?

时间:2017-03-17 11:27:17

标签: jdo

我的实体之间有各种关系,默认情况下所有关系都使用延迟加载。我不想使用预先加载,但我希望能够在某些查询中获取某些关系(就像我可以使用 JPA&#39的联接提取

我尝试使用命名的获取组,但我不确定如何使用它。我想告诉JDO创建只有一个带连接的SQL查询,然后为我构建一个实体图。

<class name="Account" identity-type="application" table="account" detachable="false" >
            <inheritance strategy="new-table" />
            <field name="_accountId" value-strategy="sequence" sequence="ACCOUNT_ID_SEQUENCE"><column name="account_id" /></field>

            <field name="_phone"><column name="phone" /></field>
            <field name="_phoneCode"><column name="phone_code" /></field>
            <field name="_phone2"><column name="phone2" /></field>
            <field name="_phone2Code"><column name="phone2_code" /></field>
            <field name="_state"><column name="state" /></field>

            <fetch-group name="personInfo">
            <field name="_personHistory" mapped-by="_account" delete-action="cascade">
                <collection element-type="Person" />
                <column name="account_id" />
            </field>
            </fetch-group>


        </class>

代码

PersistenceManager pm = getPersistenceManager();
Query query = pm.newQuery(Account.class);
FetchPlan fetchPlan = pm.getFetchPlan();
fetchPlan.addGroup("personInfo");
fetchPlan.setFetchSize(FetchPlan.FETCH_SIZE_GREEDY);

return (List<Account>) query.execute();

1 个答案:

答案 0 :(得分:0)

JDO FetchGroup / FetchPlan比JPA提供的任何内容都更具灵活性。

您可以在this link之后为可持久类定义抓取组。因此,您可以将特定字段放在FetchGroup中。然后将该获取组添加到FetchPlan。对于查询,您可以根据http://www.datanucleus.org/products/accessplatform_5_0/jdo/query.html#FetchPlan

将查询的FetchPlan设置为包含要检索的候选项(和相关对象)的所有字段