我正在使用Olingo OData4库设置基本的OData提供程序。

到目前为止,我有两个由2个属性组成的简单实体,其中将一个元素定义为键。

+--------+    +---------+
| Person |    | Project |
+--------+    +---------+
| ID     |    | CODE    |
| Name   |    | Name    |
+--------+    +---------+


我使用propertyRef.setPropertyName("Code")指定该Key元素,如下所示:

//create EntityType properties
Property code = new Property().setName("Code").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
Property name = new Property().setName("Name").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());

// create PropertyRef for Key element
PropertyRef propertyRef = new PropertyRef();
propertyRef.setPropertyName("Code");

// configure EntityType
EntityType entityType = new EntityType();
entityType.setName(ET_PROJECT_NAME);
entityType.setProperties(Arrays.asList(code, name));
entityType.setKey(Arrays.asList(propertyRef));

return entityType;


现在,我想设置一个更复杂的实体类型,该实体类型具有一组属性作为其键元素,而不是单个Key元素。

+----------+
| Activity |
+----------+
| pid      | --> FK references (Person.ID)
| pcode    | --> FK references (Project.Code)
| START    |
| END      |
| NAME     |
+----------+
Composite key : {START, END, NAME}


根据文档,PropertyRef仅允许将单个String作为参数传递:
http://olingo.apache.org/javadoc/odata4/index.html?org/apache/olingo/ext/proxy/api/annotations/CompoundKey.html

问题:

(1)除了PropertyRef之外,我还应该使用另一个类来注册这种复合键吗?

(2)如何定义两个外键?

在此先感谢您指出正确的方向。

最佳答案

您必须为每个键注册一个PropertyRef。因此,您的代码应如下所示:

.setKey(Arrays.asList(
          new CsdlPropertyRef().setName("START"),
          new CsdlPropertyRef().setName("END"))),
          new CsdlPropertyRef().setName("NAME")))

10-08 19:23