Olingo OData V2 Read Property未实现

时间:2016-06-16 08:25:52

标签: jpa odata olingo

我使用EclipseLink在与JPA连接的Apache Olingo V2中实现了OData V2服务。所有请求都正常工作,但是当涉及到这一点时,我想通过GET请求从以下URL的实体集中访问单个属性:

  

http://localhost:8080/MyODataService/XXXXXX.svc/EntitySet(12345)/Property

作为回报的回应是:

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code/>
           <message xml:lang="de-DE">Not implemented</message>
</error>

扩展ODataJPASeviceFactory的类如下所示:

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的实体集的单个属性执行GET和POST请求?

3 个答案:

答案 0 :(得分:1)

如果您使用Olingo JPA Extension,目前尚未实现从一个实体访问单个属性。

如果您想支持此行为,您可以注册自定义处理器并仅覆盖&#34; readEntityComplexProperty&#34;和&#34; readEntitySimpleProperty&#34;方法。在那里,您可以使用自定义代码来专门获取值。 您不会覆盖的每个方法都会导致执行标准的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

答案 1 :(得分:0)

您需要在实体集之间创建关联。 例如,要访问以下网址:http://localhost:8080/myService.svc/Cars(&#39; 6&#39;)/制造商,您需要在汽车和制造商关联集之间创建关联。 请查看文档:{​​{3}}

答案 2 :(得分:-2)

Hegg,

你可以用

http://localhost:8080/MyODataService/XXXXXX.svc/EntitySet(12345)/?$选择=属性

再见

多梅尼科