使用OData时是否需要再次编写手动查询?

时间:2018-06-04 21:50:08

标签: database odata olingo

使用OData时,我们是否需要编写手动SQL查询才能与数据库进行通信?如果是这样,OData的优势是什么?我正在使用Apache Olingo实现。

1 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow!

这个问题过于宽泛而无法完全回答,因此有关先前研究的评论。不过,我只想列举几点来试图引导你朝着正确的方向前进:

  • OData是一个基于REST的协议(即OData本身就是RESTful)。
  • OData具有固定的结构,具有众所周知的URI模式,请求/响应格式等。
  • 使用OData与使用普通REST的优点是服务的使用者只需知道OData协议而不是您的具体实现。这实际上意味着实现客户端(例如UI)的努力应该相当低。此外,这意味着您可以轻松支持多个客户端(例如UI和另一个外部系统)。
  • 您应该考虑是否要将持久模型的1对1映射到OData模型。一般来说,非平凡的应用程序倾向于暴露与持久模型不同的API(例如,您对实体进行去规范化或进行一些预测......)。
  • 此外,您应该考虑实际拥有业务逻辑的位置。只是允许UI通过OData进行数据库操作是一个非常坏主意,因为它会在UI上移动所有逻辑。
  • 最后,我要提一下,实际上有一种方法可以使用Olingo + JPA并自动生成数据库查询。您可以在Olingo documentation上找到更多信息。简而言之,您只需要创建一个ODataJPAServiceFactory子类,并将您的Entity Manager Factory传递给initializeODataJPAContext方法中的OData JPA上下文:
private static final String PUNIT_NAME = "punit"; 
public ODataJPAContext initializeODataJPAContext() {
    ODataJPAContext oDataJPAContext = this.getODataJPAContext(); 
    EntityManagerFactory emf = 
        Persistence.createEntityManagerFactory(PUNIT_NAME); 
    oDataJPAContext.setEntityManagerFactory(emf);   
    oDataJPAContext.setPersistenceUnitName(PUNIT_NAME); 
    return oDataJPAContext;
}