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-файла
<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>