啟動專案拋出異常,提示 `Teacher` 類別的 `list_courses` 屬性找不到 Getter/Setter,或映射配置錯誤。初學者檢查實體類發現 Getter/Setter 明明寫了,百思不得其解。
Hibernate 預設依 **JavaBeans 規範** 透過反射尋找存取器:
常見錯誤:寫成 `getList_courses()` (小寫 l) 或 `getListCourses()` 但欄位名不匹配,導致反射找不到。
單向一對多關聯正確配置:
<!-- Teacher.hbm.xml -->
<class name="cn.pj.zyf.domain.Teacher" table="teacher">
<id name="tid" column="tid">
<generator class="assigned"/>
</id>
<property name="tname" column="tname"/>
<property name="pic" column="pic"/>
<property name="description" column="description"/>
<!-- 一對多:Teacher 1 -- N Course -->
<set name="list_courses" table="course" lazy="true" cascade="all-delete-orphan">
<key column="teacher_id"/> <!-- 外鍵欄位在 course 表 -->
<one-to-many class="cn.pj.zyf.domain.Course"/>
</set>
</class>
關鍵屬性:
<class name="Course" table="course">
<id name="cid" column="cid"><generator class="native"/></id>
<property name="cname" column="cname"/>
<many-to-one name="teacher" class="Teacher" column="teacher_id" not-null="true"/>
</class>
若為雙向,`Teacher` 端 `
建議宣告介面型別:
private Set list_courses = new HashSet<>(); // 初始化避免 NPE
public Set getList_courses() { return list_courses; }
public void setList_courses(Set list_courses) { this.list_courses = list_courses; }
Hibernate 映射錯誤 90% 來自 **屬性名/Getter/Setter 命名不一致** 或 **`.hbm.xml` 中 `name`/`column` 拼寫錯誤**。嚴格遵循 JavaBeans 命名慣例、使用 IDE 產生 Getter/Setter、仔細核對映射檔,即可避免此類低級錯誤。