Нужно ли нам снова писать ручные запросы при использовании OData? - PullRequest
0 голосов
/ 05 июня 2018

При использовании OData нужно ли писать ручные SQL-запросы для связи с базой данных?Если да, то в чем преимущество OData?Я использую реализацию Apache Olingo.

1 Ответ

0 голосов
/ 06 июня 2018

Добро пожаловать в StackOverflow!

Вопрос слишком широкий, чтобы на него можно было полностью ответить, поэтому в комментариях спрашивается о предшествующем исследовании.Тем не менее, я бы просто перечислил пару пунктов, чтобы попытаться направить вас в правильном направлении:

  • OData - это протокол поверх REST (т. Е. OData сам по себе является RESTful).
  • OData имеет фиксированную структуру с хорошо известными схемами URI, форматами запросов / ответов и т. Д.
  • Преимущество использования OData по сравнению с использованием простого REST заключается в том, что потребителям сервиса просто необходимо знатьПротокол OData, а не ваша конкретная реализация.На самом деле это означает, что усилия по реализации клиентов (например, пользовательского интерфейса) должны быть значительно ниже.Кроме того, это означает, что вы можете легко поддерживать несколько клиентов (например, пользовательский интерфейс, а также другую внешнюю систему).
  • Вы действительно должны подумать, хотите ли вы сделать отображение вашей постоянной модели 1: 1 в вашу модель OData.,Вообще говоря, нетривиальные приложения, как правило, предоставляют другой API, нежели постоянная модель (например, вы нормализуете сущности или делаете некоторые проекции ...).
  • Кроме того, вы должны рассмотреть, где вы хотите на самом делеесть ваша бизнес-логика.Простое разрешение пользовательскому интерфейсу выполнять операции с базой данных через OData - очень плохая идея , поскольку оно перемещает всю вашу логику в пользовательском интерфейсе.
  • Наконец, я бы сказал, что на самом деле существует способиспользуя Olingo + JPA и автоматически генерирует запросы к базе данных.Вы можете найти больше информации в документации Olingo .В двух словах, вам просто нужно создать подкласс ODataJPAServiceFactory и передать фабрику Entity Manager в контекст OData JPA в методе initializeODataJPAContext:
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;
}
...