我使用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请求?
答案 0 :(得分:1)
如果您使用Olingo JPA Extension,目前尚未实现从一个实体访问单个属性。
如果您想支持此行为,您可以注册自定义处理器并仅覆盖&#34; readEntityComplexProperty&#34;和&#34; readEntitySimpleProperty&#34;方法。在那里,您可以使用自定义代码来专门获取值。 您不会覆盖的每个方法都会导致执行标准的Olingo功能。
以下是有关如何注册自定义JPA处理器的教程:http://olingo.apache.org/doc/odata2/tutorials/CustomODataJPAProcessor.html
答案 1 :(得分:0)
您需要在实体集之间创建关联。 例如,要访问以下网址:http://localhost:8080/myService.svc/Cars(&#39; 6&#39;)/制造商,您需要在汽车和制造商关联集之间创建关联。 请查看文档:{{3}}
答案 2 :(得分:-2)