时间:2010-07-26 09:36:29

标签: java orm eclipselink criteria-api jpa-2.0

2 个答案:

答案 0 :(得分:2)

Criteria API的文档仅描述了查询,因为Criteria API不是为DDL操作而创建的。实际上,我甚至会说整个JPA API并不是真的为此做的。

顺便说一下,另一个问题的代码没有显示DDL操作,它显示了JPA 2.0规范中描述的批量 DML 操作:

  

4.10批量更新和删除操作

     

批量更新和删除操作   适用于单个实体的实体   class(连同它的子类,   如果有的话)。只有一个实体抽象   模式类型可以在。中指定   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   更新操作必须兼容   键入与其所在的字段   分配

     

批量更新直接映射到   数据库更新操作,绕过   乐观的锁定检查。手提   应用程序必须手动更新   版本列的值,如果   期望的,和/或手动验证   版本列的值。

     

持久化上下文不是   与结果同步   批量更新或删除。

     

执行批量更新或删除操作时应该小心   因为它们可能会导致   数据库之间的不一致   和活动中的实体   持久化上下文。一般来说,批量   更新和删除操作应该   只能在交易中执行   在新的持久化上下文中或之前   获取或访问其实体   国家可能受此影响   操作

     

示例:

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

答案 1 :(得分:0)