我的实体之间有各种关系,默认情况下所有关系都使用延迟加载。我不想使用预先加载,但我希望能够在某些查询中获取某些关系。 (就像我可以使用 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();
答案 0 :(得分:0)
JDO FetchGroup
/ FetchPlan
比JPA提供的任何内容都更具灵活性。
您可以在this link之后为可持久类定义抓取组。因此,您可以将特定字段放在FetchGroup
中。然后将该获取组添加到FetchPlan
。对于查询,您可以根据http://www.datanucleus.org/products/accessplatform_5_0/jdo/query.html#FetchPlan