Vert.x 如何使用 Hibernate 作为非阻塞 ORM

How to use Hibernate as non-blocking ORM with Vert.x

我目前有一个 Vert.x 代码库。我使用的是 Golang,但 Golang 有点烂,而且没有好的 ORM。但显然,Vert.x 也没有好的 ORM,主要是因为 Vert.x 是非阻塞的,而 Java 的大多数 ORM 都是基于阻塞 API。

无论如何,我有一个具体的问题 - 我读到 Hibernate/JPA 可以与 Vert.x 一起使用 - 我们可以做的是将 Hibernate 调用放在不同的 Verticle 中,然后它就不会-阻塞。

这是个好主意吗?有人可以展示一个用 2 个不同的 Vert.x verticles 做这个的例子吗?

如果不是一个好主意,那么使用什么可能是一个好的 ORM?裸 SQL 调用一开始听起来很酷,但对于迁移和其他东西,可能会有点疯狂。

@tsegismont 和往常一样,已经在评论中提供了很好的解决方案。我只想澄清以下句子:

I read that Hibernate/JPA could be used with Vert.x - what we could do is put the Hibernate calls in a different Verticle and then it would be non-blocking

有一真一假:

Hibernate/JPA could be used with Vert.x

没错。通过将阻塞代码放在 worker Verticle 中,您不会阻塞 Vert.x 事件循环,并且允许基于 JDBC 的框架与 Vert.x

一起工作

put the Hibernate calls in a different Verticle and then it would be non-blocking

错误。您不会使 Hibernate 成为非阻塞的。 JDBC 本质上是阻塞的,解决这个问题的方法不多(尽管 R2DBC 是一个很好的举措)。您将使用与之前相同的线程池,但具有相同的限制。