You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移注解实体映射至hbm.xml时遭遇Not an entity错误求助

解决Hibernate迁移hbm.xml时的"Not an entity"错误

看起来你在从注解迁移到hbm.xml配置时踩了几个常见的配置坑,我帮你梳理一下问题和解决方法:

1. 修正User.hbm.xml中的实体类全限定名错误

你的User类实际包路径是com.enterprise.package.user.domain.User,但在User.hbm.xml的<class>标签里写错了包名:

<!-- 错误的包名 -->
<class name="com.enterprise.package.role.domain.User" table="user">
<!-- 应该修正为 -->
<class name="com.enterprise.package.user.domain.User" table="user">

这个错误会导致Hibernate找不到正确的实体类,直接触发"Not an entity"异常。

2. 修正hibernate.cfg.xml中的mapping标签配置

你现在用了<mapping package="..."/>,但这个标签的package属性是用来指定实体类所在的包,不是用来加载hbm.xml映射文件的!加载映射文件应该用resource属性(针对classpath下的文件)。

假设你的User.hbm.xml和Role.hbm.xml放在resources/com/enterprise/package/user/infrastructure/persistence/hibernate/目录下,修正后的mapping配置应该是:

<!-- 替换原来的package属性,改用resource -->
<mapping resource="com/enterprise/package/user/infrastructure/persistence/hibernate/Role.hbm.xml"/>
<mapping resource="com/enterprise/package/user/infrastructure/persistence/hibernate/User.hbm.xml"/>

3. 确认映射文件的路径和加载规则

因为你的User.hbm.xml和User.class不在同一个包,需要确保:

  • 映射文件放在classpath可访问的目录下(比如resources目录下的对应路径)
  • hibernate.cfg.xml中指定的resource路径完全匹配映射文件的classpath路径(注意路径用斜杠/分隔,不是点.)

额外检查点

虽然你的User类已经是public的,但再确认一下:

  • 实体类有无参构造方法(你已经有了,这点没问题)
  • 所有持久化属性的getter/setter方法是否完整(你代码里的...应该包含了这些,确保没问题)

做完以上修改后,重新启动应用,应该就能解决这个"Not an entity"的错误了。

内容的提问来源于stack exchange,提问作者Francisco Ruiz Lezcano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:57:29