我刚刚开始研究OpenJPA,试图了解它是否满足我的需求。 我已经完成了对OpenJPA并发控制的一些阅读,我知道如何创建一个命名存储过程(@NamedStoredProcedureQuery)并将其结果集映射到POJO实例列表。但是,我不明白这个组合,找不到任何具体的文件......
如果我不通过JPA执行SELECT / UPDATE / DELETE / INSERT操作,只是用它来将storedprocedure的结果映射到我的POJO,它是否仍然能够处理并发?
问题是,我将使用storedprocedure来SELECT对象,稍后当我更改它们时,我使用不同的存储过程来更新这些对象。 在我这样做之前,它如何知道另一个存储过程是否更新了相同的表? 它是否跟踪我的POJO对象的状态(假设它被@Entity标记)? 它在调用映射到它的任何存储过程之前是否查询该表(假设我告诉JPA该对象可以映射到哪个表)?
谢谢!
答案 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的实用程序具有供应商独立性,可通过使用存储过程来减少。