Hibernate композитный ключ не работает - PullRequest
1 голос
/ 07 января 2011

Вот код, который я использую:

База данных:

 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) выдает исключение нулевого указателя.

1 Ответ

3 голосов
/ 07 января 2011

Документ Hibernate сказал:

Стол с составным ключом может быть сопоставлены с несколькими свойствами класс в качестве идентификатора свойств. элемент принимает сопоставления свойств и отображения как ребенок элементы.

Постоянный класс должен переопределить equals () и hashCode () для реализации составной идентификатор равенства. Это должно также реализовать Serializable.

Даже если это может быть не причиной вашей проблемы (но поведение выглядит так), вы должны следовать этим требованиям и добавить equals, hashcode и serilizable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...