我正在使用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)如何定义两个外键?
提前感谢我指出正确的方向。
答案 0 :(得分:1)
您必须为每个键注册一个PropertyRef。所以你的代码应该是这样的:
.setKey(Arrays.asList(
new CsdlPropertyRef().setName("START"),
new CsdlPropertyRef().setName("END"))),
new CsdlPropertyRef().setName("NAME")))