0

我刚刚开始研究 OpenJPA,试图了解它是否满足我的需求。我已经阅读了一些有关 OpenJPA 并发控制的内容,并且知道如何创建命名存储过程 (@NamedStoredProcedureQuery) 并将其结果集映射到 POJO 实例列表。但是,我不明白这个组合,也找不到任何具体的文档......

如果我不通过 JPA 执行 SELECT/UPDATE/DELETE/INSERT 操作,而只是使用它将存储过程的结果映射到我的 POJO,它仍然能够处理并发吗?

问题是,我将使用存储过程来选择对象,然后当我更改它们时,我使用不同的存储过程来更新这些对象。它如何知道另一个存储过程是否在我这样做之前更新了同一个表?它是否跟踪我的 POJO 对象的状态(假设它由@Entity 标记)?它是否在调用映射到它的任何存储过程之前查询该表(假设我告诉 JPA 该对象可以映射到哪个表)?

谢谢!

4

1 回答 1

0

我没有使用过 OpenJPA,但分析它的方法很少。

第一种方法是在 OpenJPA 中查找 Hibernate 的类似 showsql 的配置。

您可以尝试的下一件事是查找任何查询日志。MySQL 提供查询日志。

像 Hibernate 这样的 JPA 提供程序通常会生成一对一的查询。即对于更新,它不会先选择表。JPA 还定义了 JPA 提供者实现的锁定机制。

https://blogs.oracle.com/carolmcdonald/entry/jpa_2_0_concurrency_and

这与隔离级别相结合可以帮助您调整行为。

此外,您可以使用检查和更新。以下查询的效果。

UPDATE some_table SET column_a = 456 where column_a = 123 and id = 1

最后,反对使用存储过程的建议。JPA 的实用程序是独立于供应商的,这通过使用存储过程而减少。

于 2012-08-03T15:44:47.493 回答