Eclipse配置Hibernate创建cfg文件触发类型转换异常求助
问题
在Eclipse 2024-6中配置Hibernate时,创建cfg文件触发未处理事件循环异常,具体报错为java.lang.ClassCastException:org.eclipse.jdt.internal.core.JavaNature无法转换为org.eclipse.jdt.core.IJavaProject。
环境配置:
- MySQL Connector/J 8.3.0
- Jboss 4.29.1 Final
- JDK22
已尝试删除.m2文件夹、使用clean命令启动Eclipse,问题仍未解决。
报错详情:
eclipse.buildId=4.32.0.20240606-1231 java.version=22.0.1 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=it_IT Framework arguments: -product org.eclipse.epp.package.jee.product Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -clean org.eclipse.ui Error Mon Aug 05 14:49:29 CEST 2024 Unhandled event loop exception java.lang.ClassCastException: class org.eclipse.jdt.internal.core.JavaNature cannot be cast to class org.eclipse.jdt.core.IJavaProject (org.eclipse.jdt.internal.core.JavaNature and org.eclipse.jdt.core.IJavaProject are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @529500a7) at org.hibernate.eclipse.console.wizards.NewConfigurationWizard.init(NewConfigurationWizard.java:325) at org.eclipse.ui.internal.dialogs.WorkbenchWizardNode.getWizard(WorkbenchWizardNode.java:164) at org.eclipse.jface.wizard.WizardSelectionPage.getNextPage(WizardSelectionPage.java:110) at org.eclipse.ui.internal.dialogs.WorkbenchWizardSelectionPage.getNextPage(WorkbenchWizardSelectionPage.java:98) at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:915) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:470) at org.eclipse.jface.dialogs.Dialog.lambda$0(Dialog.java:619) at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:84) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:265) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:91) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4285) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1160) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4083) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3673) at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) at org.eclipse.jface.window.Window.open(Window.java:799) at org.eclipse.ui.internal.handlers.WizardHandler$New.executeHandler(WizardHandler.java:261) at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:279) at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:277) at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:98) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:299) at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:233) at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:174) at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:165) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:485) at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:204) at org.eclipse.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:385) at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:141) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:581) at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:415) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:91) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4285) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1160) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4083) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3673) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1151) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:152) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:639) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:546) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605) at org.eclipse.equinox.launcher.Main.run(Main.java:1481) at org.eclipse.equinox.launcher.Main.main(Main.java:1454)
解决方案
- 降级JDK版本:JDK22属于较新的非LTS版本,Hibernate Eclipse插件大概率未完成适配。建议切换到JDK17(LTS版本):
- 安装JDK17并配置系统环境变量
- 在Eclipse中打开
Window > Preferences > Java > Installed JREs,添加JDK17并设置为默认 - 修改项目配置:右键项目 >
Properties > Java Build Path > Libraries,替换JRE System Library为JDK17;再进入Java Compiler页面,将Compiler compliance level设为17
- 更新Hibernate Eclipse插件:当前插件版本可能与Eclipse 2024-6不兼容,尝试更新:
- 打开
Help > Eclipse Marketplace,搜索Hibernate Tools - 点击更新按钮,安装最新兼容版本
- 打开
- 手动创建配置文件:绕开插件向导的问题,直接手动生成
hibernate.cfg.xml:- 在项目的
src/main/resources目录下新建XML文件 - 粘贴Hibernate配置模板,填写数据库连接URL、用户名、密码、方言等参数
- 在项目的
- 检查项目Java Nature配置:确认项目已正确添加Java特性:
- 右键项目 >
Properties > Project Facets,确保Java选项已勾选并应用 - 若未勾选,勾选后点击Apply保存,重启Eclipse
- 右键项目 >
内容的提问来源于stack exchange,提问作者zioleo1987
相关产品推荐
相关产品推荐

