java.lang.NoSuchFieldError:使用Hibernate和Hibernate C3P0的SPATIAL_MSG_LOGGER

qnzebej0  于 10个月前  发布在  Java
关注(0)|答案(1)|浏览(76)

尝试使用Hibernate和Hibernate C3P0查询数据库。它在我的本地桌面上工作,但当我部署代码时,它停止了,并显示以下错误堆栈:

java.lang.NoSuchFieldError: SPATIAL_MSG_LOGGER
    2023-07-24T10:14:59.232-07:00   at org.hibernate.spatial.dialect.mysql.MySQLDialectContributor.contributeJdbcTypes(MySQLDialectContributor.java:28)
    2023-07-24T10:14:59.232-07:00   at org.hibernate.spatial.contributor.SpatialTypeContributor.contribute(SpatialTypeContributor.java:22)
    2023-07-24T10:14:59.232-07:00   at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:390)
    2023-07-24T10:14:59.232-07:00   at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:143)
    2023-07-24T10:14:59.232-07:00   at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:97)
    2023-07-24T10:14:59.232-07:00   at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:402)
    2023-07-24T10:14:59.232-07:00   at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:90)
    2023-07-24T10:14:59.232-07:00   at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:735)

字符串
不知道SPATIAL_MSG_LOGGER是从哪里来的,因为它在我的本地桌面上不是一个问题,它从来没有在我的代码中调用。在hibernate中也没有使用任何与空间相关的东西,所以我不知道为什么它会试图调用它。
有没有什么出现的空间_味精_日志在任何搜索引擎,所以我甚至不知道从哪里开始寻找。

gupuwyp2

gupuwyp21#

如果您查看错误来自的源代码:

...
// line 28 is the one below:
HSMessageLogger.SPATIAL_MSG_LOGGER.typeContributions( this.getClass().getCanonicalName() );
...

字符串
错误说:java.lang.NoSuchFieldError: SPATIAL_MSG_LOGGER,这意味着HSMessageLogger不具有期望的字段SPATIAL_MSG_LOGGER。但是,看看这里的来源:https://github.com/hibernate/hibernate-orm/blob/main/hibernate-spatial/src/main/java/org/hibernate/spatial/HSMessageLogger.java可以看到该字段已初始化,这意味着它应该具有值。
此外,它似乎在2022年3月的某个时候(见:https://github.com/hibernate/hibernate-orm/commit/741 b6 b71 f1552 aa 224 fb 61 d38 b85 b32 e0 b8 a19 b4 #diff-ff 75339310 aacf 045 c3 aabe 5190 c15 a4 d338939 a167 cf 7 f39 f096 dcc 7328 b1 c3)原始的Logger字段名被替换为SPATIAL_MSG_LOGGER,这对你来说是失败的。
为了总结以上它们如何导致您看到的问题,似乎有:
1.部署环境中的hibernate/spring/spatial版本不匹配,或者
1.你的配置需要以某种方式排序,以便在执行失败的代码(你共享的stacktrace来自哪里)之前初始化spatial logger。
您可以尝试做的是禁用空间整合,看看这是否会改变什么。我认为配置设置是:hibernate.integration.spatial.enabled(默认为true,您可以尝试将其设置为false)。
另一件事是尝试查看您的配置是否有一些奇怪的版本组合,并尝试修复它(更新所有内容,显式设置特定版本,以便部署环境可以正确读取它们)。

EDIT:(第三个选项)您也可以联系AWS支持,询问他们有关错误的信息,特别是他们如何解决hibernate依赖项

我希望这对你有帮助,或者至少给予你一些建议。祝你好运!

相关问题