2011-01-07 21 views
1

這裏Hibernate的複合鍵是我使用的代碼:不工作

數據庫:

CREATE TABLE IF NOT EXISTS `btech_faculty_assigned` (
     `subject_id` varchar(8) NOT NULL, 
     `year` varchar(4) NOT NULL, 
     `section` varchar(1) NOT NULL, 
     `branch` varchar(10) NOT NULL, 
     `semister` varchar(1) NOT NULL, 
     `FID` varchar(10) NOT NULL, 
     `islab` varchar(1) NOT NULL, 
     PRIMARY KEY (`subject_id`,`year`,`section`,`branch`,`semister`) 
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

HBM文件:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
<class name="com.att_marks.students.BtechFacultyAssigned" table="btech_faculty_assigned"> 
<composite-id> 
<key-property name="subjectID" column="subject_id"/> 
<key-property name="year" column="year"/> 
<key-property name="section" column="section"/> 
<key-property name="branch" column="branch"/> 
<key-property name="semister" column="semister"/> 
</composite-id> 

<property name="FID" column="FID"></property> 
<property name="islab" column="islab"></property> 
</class> 
</hibernate-mapping> 

POJO文件:

package com.att_marks.students; 

public class BtechFacultyAssigned { 
    private String subjectID; 
    public String getSubjectID() { 
     return subjectID; 
    } 
    public void setSubjectID(String subjectID) { 
     this.subjectID = subjectID; 
    } 
    public String getYear() { 
     return year; 
    } 
    public void setYear(String year) { 
     this.year = year; 
    } 
    public String getSeciton() { 
     return section; 
    } 
    public void setSeciton(String section) { 
     this.section = section; 
    } 
    public String getFID() { 
     return FID; 
    } 
    public void setFID(String fID) { 
     FID = fID; 
    } 
    public String getSemister() { 
     return semister; 
    } 
    public void setSemister(String semister) { 
     this.semister = semister; 
    } 
    public String getBranch() { 
     return branch; 
    } 
    public void setBranch(String branch) { 
     this.branch = branch; 
    } 
    public String getIslab() { 
     return islab; 
    } 
    public void setIslab(String islab) { 
     this.islab = islab; 
    } 
    private String year; 
    private String section; 
    private String FID; 
    private String semister; 
    private String branch; 
    private String islab; 

} 

的整個項目只要這個HBM文件工作正常未包含在配置文件中。此文件包含在配置文件中時,sessionFactory.createQuery(query)文件將引發空指針異常。

+0

或任何日誌文件顯示當休眠啓動/解析配置時發生的問題。 – Ralph 2011-01-07 19:40:41

回答

3

Hibernate doc說:

與複合密鑰A表可以與 類爲標識符屬性的多個屬性被映射 。 元素接受 屬性映射和 映射作爲子元素 元素。

持久類必須覆蓋 equals()方法和hashCode()來實現 複合標識符平等。它必須 也實現Serializable。

即使這可能不是你的問題的原因(但行爲樣子),你必須遵循這一要求,並添加equalshashcodeserilizable