迁移注解实体映射至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
相关产品推荐
相关产品推荐

