gpt4 book ai didi

java - OData V4 中的双向导航

转载 作者:行者123 更新时间:2023-12-02 06:16:50 32 4
gpt4 key购买 nike

* 如果答案能解决我的问题(如果您没有详细的规范解决方案),我将接受赏金答案 *

当我尝试从浏览器访问元数据 (http://......Service.svc/ $metadata) 时,我看到以下错误。

500 Cannot find navigation property with name: projectConfigs at type ProjectConfig

我正在尝试在 OData v4 中设计双向关联(我正在使用 Partner,还有其他可用的方式吗?!)。我不确定我在实现它时犯了什么错误。

我有两个类,即“Project”和“ProjectConfig”。我需要从 Project 导航到 ProjectConfig,反之亦然。这个想法是,对于已定义的项目,我应该能够看到 ProjectConfig(urations),并从那里导航回它所属的项目。

我正在使用 Olingo 框架来编写应用程序代码。 This is the example i followed.

我在此示例中看到的挑战是导航名称“Products”和实体集名称“Products”相同。

据我了解,当我们在导航上定义合作伙伴时,我们应该能够在“导航类型”中找到具有相同名称的属性。理想情况下,这将设置返回实体类型的导航。

我已经粘贴了感兴趣的元数据和 Java 应用程序代码。

元数据.xml

<EntityType Name="Project">
<Key>
<PropertyRef Name="id"/>
</Key>
<Property Name="id" Type="Edm.Int32"/>
<Property Name="name_artifact_id" Type="Edm.String"/>
<Property Name="groupid" Type="Edm.String"/>
<Property Name="project_display_name" Type="Edm.String"/>

<NavigationProperty Name="projectConfigs"
Type="Collection(devplatform.config.ProjectConfig)"
Partner="project"/>
</EntityType>

<EntityType Name="ProjectConfig">
<Key>
<PropertyRef Name="id"/>
</Key>
<Property Name="id" Type="Edm.Int32"/>

<NavigationProperty Name="project"
Type="devplatform.config.Project"
Partner="projectConfigs"/>
</EntityType>

<EntitySet Name="Projects" EntityType="devplatform.config.Project">
<NavigationPropertyBinding Path="ProjectConfigs" Target="ProjectConfigs"/>
</EntitySet>

<EntitySet Name="ProjectConfigs" EntityType="devplatform.config.ProjectConfig">
<NavigationPropertyBinding Path="Projects" Target="Projects"/>
</EntitySet>

DemoEdmProvider.java

public static void main(String[] args) {
public static final String ET_PROJECT_NAME = "Project";
public static final FullQualifiedName ET_PROJECT_FQN =
new FullQualifiedName(NAMESPACE, ET_PROJECT_NAME);

public static final String ET_PROJECTCONFIG_NAME = "ProjectConfig";
public static final FullQualifiedName ET_PROJECTCONFIG_FQN =
new FullQualifiedName(NAMESPACE, ET_PROJECTCONFIG_NAME);

public static final String ES_PROJECTS_NAME = "Projects";
public static final String ES_PROJECTCONFIGS_NAME = "ProjectConfigs";

public static final String NAV_TO_PROJECT = "Project";
public static final String NAV_TO_PROJECTCONFIG = "ProjectConfig";


if (entityTypeName.equals(ET_PROJECT_FQN)) {
List<CsdlProperty> propertyList = new ArrayList<CsdlProperty>();
// create EntityType properties
CsdlProperty id =
new CsdlProperty().setName("id")
.setType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName());
propertyList.add(id);
CsdlProperty name_artifact_id =
new CsdlProperty().setName("name_artifact_id")
.setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
propertyList.add(name_artifact_id);
CsdlProperty groupid =
new CsdlProperty().setName("groupid")
.setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
propertyList.add(groupid);
CsdlProperty project_display_name =
new CsdlProperty().setName("project_display_name")
.setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
propertyList.add(project_display_name);


// create PropertyRef for Key element
CsdlPropertyRef propertyRef = new CsdlPropertyRef();
propertyRef.setName("id");

// navigation property: many-to-one, null not allowed (product must have a category)
List<CsdlNavigationProperty> navPropList = new ArrayList<CsdlNavigationProperty>();

CsdlNavigationProperty projectconfigs =
new CsdlNavigationProperty().setName(NAV_TO_PROJECTCONFIGS)
.setType(ET_PROJECTCONFIG_FQN)
.setCollection(true)
.setPartner("projectConfigs");
navPropList.add(projectconfigs);


// configure EntityType
entityType = new CsdlEntityType();
entityType.setName(ET_PROJECT_NAME);
entityType.setProperties(propertyList);
entityType.setKey(Arrays.asList(propertyRef));
entityType.setNavigationProperties(navPropList);
}

if (entityTypeName.equals(ET_PROJECTCONFIG_FQN)) {
List<CsdlProperty> propertyList = new ArrayList<CsdlProperty>();
// create EntityType properties
CsdlProperty id =
new CsdlProperty().setName("id")
.setType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName());
propertyList.add(id);

// create PropertyRef for Key element
CsdlPropertyRef propertyRef = new CsdlPropertyRef();
propertyRef.setName("id");

// navigation property: many-to-one, null not allowed (product must have a category)
List<CsdlNavigationProperty> navPropList = new ArrayList<CsdlNavigationProperty>();

// ERROR CAUSING LINE
CsdlNavigationProperty project =
new CsdlNavigationProperty().setName(NAV_TO_PROJECT)
.setType(ET_PROJECT_FQN)
.setNullable(true)
.setPartner("project");
navPropList.add(project);

// configure EntityType
entityType = new CsdlEntityType();
entityType.setName(ET_PROJECTCONFIG_NAME);
entityType.setProperties(propertyList);
entityType.setKey(Arrays.asList(propertyRef));
entityType.setNavigationProperties(navPropList);
}

如果需要,我可以提供任何缺失的详细信息! :) 无法得到回复!不确定我的问题是否与小社区相关!!

最佳答案

我猜问题的根源在于用于 NavigationProperty 名称和 NavigationPropertyBinding 路径的字符大小写不同。考虑对所有属性名称使用大驼峰式大小写。

在命名 ProjectConfig 的导航属性时,使用路径 Projects(复数形式)进行实体集 ProjectConfigs 的导航属性绑定(bind)还存在另一个问题 作为项目(单数)。

关于java - OData V4 中的双向导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58234873/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com