如何检索相关的Odata实体Odata4j

时间:2013-10-01 10:32:23

标签: java odata relationship odata4j

我无法使用odata4j库检索相关实体。我的问题如下:

A与B有一对多的关系.A有一个B类的项目列表“bs”。 我使用

创建了实体A和链接
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", a.getId());
OEntity entityB = consumer.createEntity("B").properties(OProperties.string("name", "some name")).link("a", OEntityKey.create(map)).execute();

然后,我使用以下方法检索实体B,其中convert将检索到的对象的属性分配给类型A的对象:

A b = convert(consumer.getEntity("A", id).expand("bs").execute());

在转换中,我尝试使用以下方式获取相关实体:

OEntity bsOEntity = a.getLink("bs", OLink.class).getRelatedEntity();

以上结果导致链接被检索,但“getRelatedEntity”返回null

我使用链接和相关实体是错误的吗?如果是这样,我将如何检索Odata4j中的相关实体?网上的例子不多。

非常感谢您的帮助。

谢谢

修改 我还尝试使用以下方法检索相关实体:

ORelatedEntitiesLink link = (ORelatedEntitiesLink) a.getLinks().get(0);
OEntity retrievedEntity = consumer.getEntities(link).top(1).execute().first();

我尝试使用创建链接,这似乎以相同的方式工作,但需要额外调用以获取实体B:

OEntity bEntity = consumer.getEntity("A", FOREIGN_KEY_VALUE).execute();
OEntity medEntity = consumer.createEntity("B").properties(OProperties.string("name", "some name")).link("a", bEntity).execute();

1 个答案:

答案 0 :(得分:0)

您是否尝试过getRelatedEntities()而不是getRelatedEntity()。从你的解释我明白A有一个B的集合,所以试试

List<OEntity> bsOEntities = a.getLink("bs", OLink.class).getRelatedEntities();

它对我有用。