Olingo OData V2 读取 属性 未实现
Olingo OData V2 Read Property not implemented
我使用 Apache Olingo V2 实现了 OData V2 服务,并使用 EclipseLink 与 JPA 连接。所有请求都工作正常,但说到这一点,我想通过来自实体集的 GET 请求访问单个 属性,例如以下 URL:
http://localhost:8080/MyODataService/XXXXXX.svc/EntitySet(12345)/Property
return 中的响应是:
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code/>
<message xml:lang="de-DE">Not implemented</message>
</error>
扩展 ODataJPASeviceFactory 的 class 如下所示:
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext;
import org.apache.olingo.odata2.jpa.processor.api.ODataJPAServiceFactory;
import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException;
public class JPAODataServiceFactory extends ODataJPAServiceFactory
{
private static final String PERSISTENCE_UNIT_NAME = "MyPersistenceUnitName";
@Override
public ODataJPAContext initializeODataJPAContext() throws ODataJPARuntimeException
{
ODataJPAContext oDatJPAContext = this.getODataJPAContext();
try
{
EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
oDatJPAContext.setEntityManagerFactory(emf);
oDatJPAContext.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
return oDatJPAContext;
} catch (Exception e)
{
throw new RuntimeException(e);
}
}
我现在的问题是:
我如何实现该功能,以便我不仅可以对整个实体集进行 GET 和 POST 请求,而且还可以对实体集的单个 属性 进行请求,就像我尝试使用提到的 URL?
您需要在您的实体集之间创建关联。
例如,要访问以下 URL:http://localhost:8080/myService.svc/Cars('6')/Manufacturer,您需要在您的汽车和制造商关联集之间创建一个关联。
查看文档:https://olingo.apache.org/doc/odata2/tutorials/basicread.html
如果您使用 Olingo JPA 扩展,目前无法实现从一个实体访问单个 属性。
如果你想支持这种行为,你可以注册一个自定义处理器并只覆盖 "readEntityComplexProperty" 和 "readEntitySimpleProperty" 方法。在那里您可以拥有自定义代码,您可以在其中专门取回值。
您未覆盖的每个方法都会导致执行标准的 Olingo 功能。
这里有一个关于如何注册自定义 JPA 处理器的教程:http://olingo.apache.org/doc/odata2/tutorials/CustomODataJPAProcessor.html
如果您自己实现该功能,您的代码将如下所示:https://github.com/apache/olingo-odata2/blob/597465569fdd15976d0486711d4a38f93a7c6696/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java#L592
赫格,
你可以使用
http://localhost:8080/MyODataService/XXXXXX.svc/EntitySet(12345)/?$select=属性
再见
多梅尼科
我使用 Apache Olingo V2 实现了 OData V2 服务,并使用 EclipseLink 与 JPA 连接。所有请求都工作正常,但说到这一点,我想通过来自实体集的 GET 请求访问单个 属性,例如以下 URL:
http://localhost:8080/MyODataService/XXXXXX.svc/EntitySet(12345)/Property
return 中的响应是:
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code/>
<message xml:lang="de-DE">Not implemented</message>
</error>
扩展 ODataJPASeviceFactory 的 class 如下所示:
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext;
import org.apache.olingo.odata2.jpa.processor.api.ODataJPAServiceFactory;
import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException;
public class JPAODataServiceFactory extends ODataJPAServiceFactory
{
private static final String PERSISTENCE_UNIT_NAME = "MyPersistenceUnitName";
@Override
public ODataJPAContext initializeODataJPAContext() throws ODataJPARuntimeException
{
ODataJPAContext oDatJPAContext = this.getODataJPAContext();
try
{
EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
oDatJPAContext.setEntityManagerFactory(emf);
oDatJPAContext.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
return oDatJPAContext;
} catch (Exception e)
{
throw new RuntimeException(e);
}
}
我现在的问题是: 我如何实现该功能,以便我不仅可以对整个实体集进行 GET 和 POST 请求,而且还可以对实体集的单个 属性 进行请求,就像我尝试使用提到的 URL?
您需要在您的实体集之间创建关联。 例如,要访问以下 URL:http://localhost:8080/myService.svc/Cars('6')/Manufacturer,您需要在您的汽车和制造商关联集之间创建一个关联。 查看文档:https://olingo.apache.org/doc/odata2/tutorials/basicread.html
如果您使用 Olingo JPA 扩展,目前无法实现从一个实体访问单个 属性。
如果你想支持这种行为,你可以注册一个自定义处理器并只覆盖 "readEntityComplexProperty" 和 "readEntitySimpleProperty" 方法。在那里您可以拥有自定义代码,您可以在其中专门取回值。 您未覆盖的每个方法都会导致执行标准的 Olingo 功能。
这里有一个关于如何注册自定义 JPA 处理器的教程:http://olingo.apache.org/doc/odata2/tutorials/CustomODataJPAProcessor.html
如果您自己实现该功能,您的代码将如下所示:https://github.com/apache/olingo-odata2/blob/597465569fdd15976d0486711d4a38f93a7c6696/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ListsProcessor.java#L592
赫格,
你可以使用
http://localhost:8080/MyODataService/XXXXXX.svc/EntitySet(12345)/?$select=属性
再见
多梅尼科