我在 JPA2(使用 EclipseLink v2.4)应用程序(没有容器,只有 JavaSE)中使用乐观锁定。我正在尝试实现强一致性,因此我希望在提交时检查事务期间读取的所有对象的版本。
当我使用 MySQL 作为目标数据库时,事情会如我所料地发生:当我有一个客户端执行只读事务同时客户端执行写入时,一些只读事务中止(并重试)。
但是,当我使用 HSQLDB (v2.2.9) 时,只读事务永远不会中止。事实上,tcpdump 根本没有显示任何东西!
这里发生了什么?我尝试过使用隔离级别无济于事。无论如何,我不明白为什么这很重要——似乎 EclipseLink 应该生成大致相同的 SQL,而不管隔离如何。也许正在进行一些奇怪的优化?
阅读 JPA 规范令人困惑。我什至保证会检查我的读取集版本,还是只检查被修改或删除的对象版本?