跨JVM使用休眠模式。

| 我的应用程序调用了跨2个JVM集群的服务器。 请求可以发送到任一服务器。 我正在将Spring和Hibernate一起用于DB调用(对于DB2数据库)。 但是,我注意到,Hibernate没有跨JVM的自动锁定机制。我确实通过诸如-query.setLockMode(\“ myBo \”,LockMode.UPGRADE);的方式实现了锁定机制。但这似乎不适用于整个JVM。 问题场景: 首先,JVM从Table1中选择要更新的数据(使用LockMode.UPGRADE)。在第一个JVM完成更新之前,第二个JVM还从Table1中选择数据(不应发生)。第一个JVM成功完成更新。但是第二个JVM因DuplicateKeyException而失败(表1的索引键正在更新)。 有人可以为此建议解决方案吗? 谢谢 拉迪卡
已邀请:
这与您有多个JVM无关。您可能在相同的JVM上有两个并发线程的情况相同,因为Hibernate根本不做任何锁定。如果需要锁定,请使用乐观锁(使用version属性),或使用数据库中的锁(使用LockMode.UPGRADE)。 但是,这两种锁定机制都会导致异常:一旦您有多个并行事务处理相同的数据,它们就不可避免。您必须牢记这一点来设计应用程序(即显示错误消息,实施重试机制等)。

要回复问题请先登录注册