Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用hibernate和postrgresql跨程序的多个实例锁定记录?_Java_Hibernate_Postgresql_Jpa_Postgresql 9.2 - Fatal编程技术网

Java 如何使用hibernate和postrgresql跨程序的多个实例锁定记录?

Java 如何使用hibernate和postrgresql跨程序的多个实例锁定记录?,java,hibernate,postgresql,jpa,postgresql-9.2,Java,Hibernate,Postgresql,Jpa,Postgresql 9.2,我想找到一种方法来锁定实例a中的记录,这样实例B就可以知道该记录已被锁定 以下是GUI的工作原理: 在实例A上,用户请求修改实体E。程序检查某些内容(尝试保留令牌?其他内容?…)并在E空闲时显示修改对话框 假设实例A能够保留E,而实例B想要打开相同的窗口。B尝试锁定记录(使用尚未找到的解决方案),由于A已经存在,B仅显示咨询对话框 我正在使用: 爪哇 在每个实例上休眠 postgresql(也许我可以使用锁行为?) 注意:我只想锁定一个表的一条记录,而不是整个表 有人能给我一个关于使用什么的

我想找到一种方法来锁定实例a中的记录,这样实例B就可以知道该记录已被锁定

以下是GUI的工作原理:

在实例A上,用户请求修改实体E。程序检查某些内容(尝试保留令牌?其他内容?…)并在E空闲时显示修改对话框

假设实例A能够保留E,而实例B想要打开相同的窗口。B尝试锁定记录(使用尚未找到的解决方案),由于A已经存在,B仅显示咨询对话框

我正在使用:

  • 爪哇
  • 在每个实例上休眠
  • postgresql(也许我可以使用锁行为?)
注意:我只想锁定一个表的一条记录,而不是整个表

有人能给我一个关于使用什么的提示,也许还可以告诉我,如果实例崩溃,我如何管理解锁保护


提前谢谢。

我很确定您需要的是
选择更新。这将锁定该行,防止其他事务写入或获得写入锁定。问题是,当另一个事务也尝试
选择更新时会发生什么。我不确定它是否会立即阻止或抛出异常。你应该试试看

休眠:第11.4节 Postgress:


使用此解决方案,您不必担心过时的锁,因为如果应用程序崩溃,事务将关闭,锁将被释放。如果DBMS没有意识到客户端的运行速度不够快,您可以随时直接在数据库上终止该事务。

我很确定,您需要的是选择
进行更新。这将锁定该行,防止其他事务写入或获得写入锁定。问题是,当另一个事务也尝试
选择更新时会发生什么。我不确定它是否会立即阻止或抛出异常。你应该试试看

休眠:第11.4节 Postgress:


使用此解决方案,您不必担心过时的锁,因为如果应用程序崩溃,事务将关闭,锁将被释放。如果DBMS没有意识到客户机的运行速度不够快,您可以直接在数据库上终止该事务。

查看它是否空闲和锁定必须是同一步骤。否则,在您检查之后,其他人可能会得到它。我认为像保留令牌之类的东西可能是一个很好的解决方案,当它已经被使用时会出现错误。释放和锁定可能已经在数据库端编码了?请看一下建议锁:看看它是否是释放和锁定必须是同一步骤。否则,在您检查之后,其他人可能会得到它。我认为像保留令牌之类的东西可能是一个很好的解决方案,当它已经被使用时会出现错误。自由锁和锁定锁可能已经在数据库端编码了?请看一下建议锁:这正是我所寻找的,也是我最终设法找到/使用的
getSession().buildLockRequest(新的LockOptions(LockMode.UPGRADE_NOWAIT)).lock(实体)
lock对于实例A,会为实例B抛出一个悲观的LockException异常。这正是我所寻找的,也是我最终设法找到/使用的
getSession().buildLockRequest(新的锁选项(LockMode.UPGRADE\u NOWAIT)).lock(实体)
lock对于实例A,为实例B抛出一个悲观锁异常。