java - Что представляет собой пример реального мира, где более предпочтительным API-интерфейсом JPA2?



2 Answers

JPA 2.0 Criteria API - это API-интерфейс, основанный на объектах, для построения запросов. Я думаю, что это может сыграть хорошую работу, когда у вас есть динамический запрос, который может стать более читаемым следующим образом

cq.select(...)
  .where(...)
  .orderBy(...)
  .groupBy(...);

Но при использовании статического запроса предпочтительнее использовать внешний, поддерживаемый и читаемый файл

<entity-mappings>
    ...
    <named-query name="ORDER">
       <query>
           <![CDATA[
               from
                   Order
           ]]>
       </query>
    </named-query>
    <named-query name="ORDER_WITH_LINE_ITEM">
       <query>
           <![CDATA[
               from
                   Order o
               inner join fetch 
                   o.lineItemList
           ]]>
       </query>
    </named-query>
    ...
</entity-mappings>

Если у вас есть модульное приложение, используйте один XML-файл для каждого модуля следующим образом

br
   com
       ar
           moduleA
               model
                   repository
                       moduleA.xml
           moduleB
               model
                   repository
                       moduleB.xml               
           moduleC
               model
                   repository
                       moduleC.xml

Затем вы определяете свой элемент mappinf-file

<mapping-file>br/com/ar/moduleA/model/repository/moduleA.xml</mapping-file>
<mapping-file>br/com/ar/moduleB/model/repository/moduleB.xml</mapping-file>
<mapping-file>br/com/ar/moduleC/model/repository/moduleC.xml</mapping-file>
java hibernate jpa jpa-2.0

Я взглянул на API критериев JPA 2.0, но я счел его слишком громоздким, в отличие от Hibernate Criteria. Есть ли веская причина использовать API критериев JPA 2.0, а не использовать JPA-QL? Спасибо за советы.




Для меня пример реального мира, где светится JPA2, возникает, когда вам нужно создать запрос на основе ввода от пользователя. Я не говорю о очень простом, где с одним параметром. Я имею в виду, когда вы сделали опцию расширенного поиска в своем приложении. Тот, который требует объединения при заполнении определенного параметра. Вы не хотите объединить свои HQL или SQL для включения большого набора параметров, дополнительных объединений и функций. Пользовательский SQL требует много тестов, чтобы доказать, что он работает. Добавление дополнительных параметров поиска в HQL и SQL требует много переделок, тогда как это может быть проще в JPA.




Related