OpenJPA:当存储过程的结果映射到对象时,如何控制并发?

时间:2012-08-02 19:15:46

标签: stored-procedures concurrency openjpa

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我没有使用过OpenJPA,但很少有方法可以对此进行分析。

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

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

像Hibernate这样的JPA提供程序通常会生成一对一查询。即对于更新,它不首先在表中SELECT。 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的实用程序具有供应商独立性,可通过使用存储过程来减少。