跨JVM使用hibernate的问题

时间:2011-04-19 13:36:19

标签: hibernate

我的应用程序调用跨2个JVM集群的服务器。 请求可以发送到任一服务器。 我使用Spring和Hibernate进行数据库调用(对于DB2数据库)。 但是,我注意到Hibernate没有跨JVM的自动锁定机制。我通过诸如query.setLockMode(“myBo”,LockMode.UPGRADE)之类的东西实现了锁定机制;但这似乎并不适用于JVM。

问题场景:

第一个JVM从Table1中选择要更新的数据(使用LockMode.UPGRADE)。在第一个JVM完成更新之前,第二个JVM也会从Table1中选择数据(这不应该发生)。第一个JVM成功完成更新。但是第二个JVM在使用DuplicateKeyException时失败(Table1的索引键发生了更新)。

有人可以为此建议一个解决方案吗?

由于 拉迪卡

1 个答案:

答案 0 :(得分:1)

这与您拥有多个JVM的事实无关。您可以在同一个JVM上使用两个并发线程的相同场景,因为Hibernate根本不执行任何锁定。如果需要锁定,则使用乐观锁(使用版本属性),或使用数据库中的锁(使用LockMode.UPGRADE)。

但是两种锁定机制都会导致异常:一旦你有几个并行事务处理相同的数据,它们就不可避免。您必须考虑到这一点设计您的应用程序(即出现错误消息,实现重试机制等)。