运行Hibernate删除操作时遭遇ConversionException异常
运行Hibernate删除操作时遭遇ConversionException异常
看起来你在执行Hibernate删除操作时碰到了一个棘手的ConversionException,而且奇怪的是查询HQL能正常工作,这确实让人摸不着头脑。咱们一步步来拆解问题:
核心问题根源
你当前使用的是Hibernate 6.0.0.Alpha1——这是一个非常早期的预览版本,本身就存在大量未修复的Bug和兼容性问题。错误栈里的Could not resolve unique-identifier to SqmFrom正是Hibernate 6早期版本中,SQM(语义查询模型)解析删除语句时的一个已知Bug,后续的稳定版本已经修复了这个问题。
具体解决方案
- 立即升级Hibernate到稳定版本:这是最关键的一步。打开你的
pom.xml,把Hibernate Core的版本从6.0.0.Alpha1替换成最新的稳定版(比如目前的6.4.x系列)。示例修改如下:<dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.4.4.Final</version> <!-- 建议使用最新稳定版 --> </dependency> - 确认HQL语法没问题:你的删除语句
delete from AlienDO where alienId = :id是完全符合规范的,和实体类的属性映射也对应(查询能正常运行也佐证了这一点),所以语法本身不是问题。 - 小细节优化:你的
App.java里重复导入了org.hibernate.query.Query,可以删掉其中一个;升级Hibernate后,@SuppressWarnings("deprecation")注解也可能不再需要,因为新版本已经优化了buildSessionFactory()相关的API。
总结
这个异常几乎可以肯定是Hibernate早期Alpha版本的Bug导致的,升级到稳定版本后,SQM解析删除语句时的标识符问题就会被解决,你的删除操作应该就能正常执行了。
备注:内容来源于stack exchange,提问作者Ankit Bhardwaj
相关产品推荐
相关产品推荐

