0

考虑 如何删除所有 JPA 实体中的代码? 此处的文档http://download.oracle.com/docs/cd/E17410_01/javaee/6/tutorial/doc/gjitv.html 仅描述查询。

4

2 回答 2

2

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

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

4.10 批量更新和删除操作

批量更新和删除操作适用于单个实体类(连同其子类,如果有)的实体。在 FROM 或 UPDATE 子句中只能指定一种实体抽象模式类型。

这些操作的语法如下:

更新语句 ::=
update_clause [where_clause]
update_clause ::= 更新实体名称 [[AS] 标识变量]
                     SET update_item {, update_item}*
update_item ::= [identification_variable.]{state_field | 单值对象字段} =
                     新值
新值 ::=
       标量表达式 |
       简单实体表达式 |
       空值

delete_statement ::= delete_clause [where_clause]
delete_clause ::= DELETE FROM entity_name [[AS] 标识变量]

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
于 2010-07-26T23:33:55.410 回答
0

我认为标准 API 中没有 DDL。在 JPQL 中也没有。

于 2010-07-26T09:39:45.480 回答