Association references unmapped class的解决方法

本文解决了一个常见问题:如何在NHibernate.cfg.xml文件中正确配置新增的hbm.xml文件。通过添加正确的XML映射资源路径,确保NHibernate能够识别并加载对应的实体映射。

搞了半天,原来我的NHibernate.cfg.xml文件里没加上新增加的hbm.xml文件
加上

Xml代码 复制代码  收藏代码
  1. <mapping resource="wisers/weboa/project/model/xml/item.hbm.xml" />!  
### 问题分析 Hibernate 报错 `Association references unmapped class` 表示某个关联引用了一个未被 Hibernate 映射的类。在用户提供的错误信息中,`com.zc.mt3.original.model.QcOriginalAccountantSubject` 被认为是未映射的类。这种问题通常出现在 Hibernate 无法识别某个实体类或其映射配置时。 ### 常见原因与解决方法 1. **未正确注册实体类或映射文件** 确保 `QcOriginalAccountantSubject` 类或其映射文件(`.hbm.xml`)已经在 `hibernate.cfg.xml` 中注册: ```xml <mapping class="com.zc.mt3.original.model.QcOriginalAccountantSubject"/> ``` 或者: ```xml <mapping resource="com/zc/mt3/original/model/QcOriginalAccountantSubject.hbm.xml"/> ``` 如果使用的是基于注解的实体类,必须确保该类被 `@Entity` 注解修饰,并且已通过 `@Table` 指定对应的数据库表名[^3]。 2. **关联映射中类路径不完整** 在 `.hbm.xml` 映射文件中,如果存在关联关系(如 `<many-to-one>` 或 `<one-to-many>`),必须使用完整的类路径,而不是简写名称。例如: ```xml <one-to-many class="com.zc.mt3.original.model.QcOriginalAccountantSubject"/> ``` 而不是: ```xml <one-to-many class="QcOriginalAccountantSubject"/> ``` 如果使用的是注解方式,确保 `@OneToOne`、`@OneToMany` 等注解中引用的类是完整的类路径[^3]。 3. **实体类路径或类名拼写错误** 检查 `QcOriginalAccountantSubject` 类的包路径是否与映射文件中的路径一致,类名是否拼写正确。例如,在 `.hbm.xml` 文件中定义的 `class` 属性必须与实际类路径完全匹配: ```xml <class name="com.zc.mt3.original.model.QcOriginalAccountantSubject" table="qc_original_accountant_subject"> ``` 如果路径错误或类名拼写错误,Hibernate 将无法识别该类并抛出异常[^3]。 4. **依赖类未编译或未加载** 确保 `QcOriginalAccountantSubject` 类已被正确编译,并且在运行时类路径中可用。如果使用 Maven 或 Gradle 构建项目,检查 `target/classes` 或构建输出目录中是否存在该类文件。 5. **使用 Hibernate 注解时未启用自动检测** 如果使用基于注解的实体类,确保在配置中启用了自动检测实体类的功能。例如,使用 `Spring Boot` 时,可以通过组件扫描自动加载实体类: ```java @EntityScan("com.zc.mt3.original.model") ``` 如果使用纯 Hibernate,可以通过 `MetadataSources` 显式添加实体类: ```java MetadataSources metadataSources = new MetadataSources(sessionFactory); metadataSources.addAnnotatedClass(QcOriginalAccountantSubject.class); ``` ### 示例代码 以下是一个基于 `.hbm.xml` 的映射文件示例,展示如何正确引用 `QcOriginalAccountantSubject` 类: ```xml <hibernate-mapping> <class name="com.zc.mt3.original.model.QcOriginalAccountantSubject" table="qc_original_accountant_subject"> <id name="id" column="id"> <generator class="native"/> </id> <property name="subjectName" column="subject_name"/> <set name="accountantDetails" inverse="true" cascade="all"> <key column="subject_id"/> <one-to-many class="com.zc.mt3.original.model.QcOriginalAccountantDetail"/> </set> </class> </hibernate-mapping> ``` ### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值