Как написать DDL в API критериев? - PullRequest
0 голосов
/ 26 июля 2010

Рассмотрим код в Как удалить все объекты JPA? Документация здесь http://download.oracle.com/docs/cd/E17410_01/javaee/6/tutorial/doc/gjitv.html описывает только запросы.

Ответы [ 2 ]

2 голосов
/ 27 июля 2010

В документации API Criteria описаны только запросы, поскольку API Criteria не предназначен для операций DDL.На самом деле, я бы даже сказал, что весь JPA API на самом деле не предназначен для этого.

И, кстати, код другого вопроса не показывает операции DDL, он показывает объем DML операции, описанные в спецификации JPA 2.0:

4.10 Операции массового обновления и удаления

Операции массового обновления и удаления применяются к объектам одного класса объектов (вместе сего подклассы, если таковые имеются).В предложении FROM или UPDATE может быть указан только один тип абстрактной схемы объекта.

Синтаксис этих операций следующий:

update_statement ::=
update_clause [where_clause]
update_clause ::= UPDATE entity_name [[AS] identification_variable]
                     SET update_item {, update_item}*
update_item ::= [identification_variable.]{state_field | single_valued_object_field} =
                     new_value
new_value ::=
       scalar_expression |
       simple_entity_expression |
       NULL

delete_statement ::= delete_clause [where_clause] 
delete_clause ::= DELETE FROM entity_name [[AS] identification_variable]

Синтаксис предложения WHERE описан в Разделе 4.5.

Операция удаления применяется только к объектамуказанный класс и его подклассы.Он не относится к связанным сущностям.

new_value, указанный для операции обновления, должен быть совместим по типу с полем, которому он назначен.

Bulkобновлять карты непосредственно в операции обновления базы данных, минуя оптимистические проверки блокировки.Переносимые приложения должны вручную обновить значение столбца версии, если это необходимо, и / или вручную проверить значение столбца версии.

Контекст постоянства не синхронизирован с результатом массового обновления или удаления.

Следует соблюдать осторожность при выполнении операций массового обновления или удаления, поскольку они могут привести к несоответствиям между базой данных и объектами в активном контексте постоянства.Как правило, массовые операции обновления и удаления должны выполняться только внутри транзакции в новом контексте постоянства или перед извлечением или доступом к объектам, состояние которых может быть затронуто такими операциями.

Примеры:

DELETE
FROM Customer c
WHERE c.status = ‘inactive’

DELETE
FROM Customer c
WHERE c.status = ‘inactive’
AND c.orders IS EMPTY

UPDATE customer c
SET c.status = ‘outstanding’
WHERE c.balance < 10000
0 голосов
/ 26 июля 2010

Я думаю, что в критериях API нет DDL. Ни в JPQL.

...