如何让 hibernate 生成 Oracle 的 FOR UPDATE WAIT 10 语法

发布于 2024-10-23 12:56:33 字数 241 浏览 10 评论 0原文

我有一行这样的代码:

final Foo foo = (Foo)session.get( Foo.class, id, LockMode.UPGRADE );

这会生成一个SELECT .. FOR UPDATE

但是,我只愿意等待 10 秒来获取锁,并且我想要一个 SELECT .. FOR UPDATE WAIT 10 。我怎样才能让休眠来生成这个?

I have a line of code like this:

final Foo foo = (Foo)session.get( Foo.class, id, LockMode.UPGRADE );

This generates a SELECT .. FOR UPDATE.

However, I'm only willing to wait for 10 seconds to obtain the lock and there for I would like a SELECT .. FOR UPDATE WAIT 10. How can I get hibernate to generate this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

三生一梦 2024-10-30 12:56:33

答案是使用 LockOptions 类使用 SetTimeout() 而不是 LockMode。

为此,我们升级到 Hibernate 3.6,却发现它对于 Oracle 来说已经损坏了。

The answer is to use the LockOptions class with SetTimeout() rather than LockMode.

For this, we upgraded to Hibernate 3.6 only to find it is broken for Oracle.

月亮坠入山谷 2024-10-30 12:56:33

AFAIK,你不能。

但是您可以等待并设置 事务超时。这取决于当你没有获得锁时你想做什么。无论如何,当你回滚整个事情时,这并不重要。

另一种方式是不等待就加锁,一秒后尝试加锁,最多十次。这不太好,但无论如何都是某种解决方案。

AFAIK, you can't.

But you could just wait and set the transaction timeout. It depends on what you want to do when you don't get the lock. When you roll back the whole thing anyway, it doesn't matter much.

Another way is to lock without wait, and try to lock it a second later, up to ten times. This isn't nice but some kind of solution anyway.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文