1

我使用 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 请求,还可以对实体集的单个属性执行 GET 和 POST 请求,就像我尝试使用提到的 URL 一样?

4

3 回答 3

1

如果您使用 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

于 2016-07-15T11:42:32.910 回答
0

您需要在实体集之间创建关联。例如,要访问以下 URL:http://localhost:8080/myService.svc/Cars ('6')/Manufacturer,您需要在汽车和制造商关联集之间创建关联。查看文档:https ://olingo.apache.org/doc/odata2/tutorials/basicread.html

于 2016-07-14T23:10:57.887 回答
-2

黑格,

您可以使用

http://localhost:8080/MyODataService/XXXXXX.svc/EntitySet(12345)/ ?$select=Property

再见

多梅尼科

于 2016-08-12T20:07:11.230 回答