我还没有看到其他人遇到这个问题,这似乎有点奇怪:我正在尝试使用Google Cloud Spanner作为PostgreSQL的直接替代品。我的应用程序连接到两个数据库,一个是本地的Postgres,另一个是配置了Postgres方言的Cloud Spanner数据库。我正在使用Java/Hibernate/Spring JPA。
***在我提问之前,我应该指出我非常清楚地知道Spanner不支持序列。
我在Google Spanner JDBC驱动程序和PGAdapter上都试过了,遇到了同样的问题:当Hibernate尝试执行DDL操作时(我使用hibernate.hbm2ddl = auto),它查询"select * from information_schema. sequences",结果失败,并显示"ERROR:关系'information_schema. sequences'不存在",很自然地,正如我提到的,Spanner不支持序列。然而,这会导致Hibernate失败,并且不生成EntityManager。
- 当然,如果你使用Cloud Spanner的休眠方言,你就不会遇到这个问题。这对我来说不是一个选项,因为我 * will_not * 在我的代码库中支持实体对象的两种方言。(如果我的实体对象是不可移植的,除了序列之外,那么我们就完全忽略了这一点。)
- 当然,如果我关闭了hbm2ddl,我不会期望看到这个问题,我也不打算开始手工维护我的模式或创建表。
所以我的问题是:这对其他人有用吗?有人在Hibernate + Cloud Spanner中使用PostgreSQL方言吗?如果是这样,-〉*你是怎么让Hibernate不查询序列的information_schema的?〈-???我没有为Cloud Spanner数据库中的实体设置任何序列的,但我确实有一些实体的序列是要发往其他本地PostgreSQL数据库的。(因为这两个连接是分开的驱动程序,这应该不重要,但也许它不知何故???)
我已经尝试了Cloud Spanner的所有3个JDBC选项,我所确定的是它看起来像Hibernate DDL + CloudSQL工作,而Hibernate DDL + PostgreSQL方言被破坏了。我希望,以让事情工作的名义,information_schema. sequences关系将存在于PostgreSQL方言数据库中,但在查询时总是返回空的,而失败的语句将是那些实际上试图创建一个序列的语句。
......因为为Spanner数据库创建一个Postgres方言,让JDBC驱动程序使用它,但不通过Hibernate Postgres方言支持它,这有点像错过了99.99%的目标市场......但我知道什么呢?也许即使这个问题得到了解决,其他DDL的东西仍然会崩溃。
1条答案
按热度按时间gj3fmq9x1#
关于您列出的不同选项:
1.不支持使用带有PostgreSQL Hibernate方言的Cloud Spanner JDBC驱动程序。特别是DDL操作将失败(正如您所看到的)。
1.支持使用带有Cloud Spanner Hibernate方言的Cloud Spanner JDBC驱动程序(很明显)。
1.支持将PostgreSQL JDBC驱动程序与PostgreSQL Hibernate方言和PGAdapter结合使用,但存在一些限制。有关不会遇到此问题的小示例应用程序,请参见this example。该示例还包含支持的功能和限制的列表。
问题可能与您使用的特定Hibernate版本和/或某些特定配置有关。打开issue here将使调试您的特定情况变得更容易。