I have many-to-many mapping with extra columns in the join table.  The table structure looks like this:table vendor{vendor_id, vendor_name, vendor_password, etc...}table student{student_id, student_name, student_password, etc..}table test{test_id, test_subject, test_price,test_level, etc..}Relations as follows:vendor to test --> many-to-manystudent to test --> many-to-manyThe link:table vendor_student_test{vendor_id, student_id, test_id, purchasedDate, assignedDate, writtenDate, result}I've created POJO classes as follows:Vendor.javapublic class Vendor {    private Long vendorId;    private String vendorName;    private String vendorPassword;    private Set<VendorStudentTest> tests;    private boolean isVendorActivate;    public boolean isVendorActivate() {        return isVendorActivate;    }    public void setVendorActivate(boolean isVendorActivate) {        this.isVendorActivate = isVendorActivate;    }    public Set<VendorStudentTest> getTests() {        return tests;    }    public void setTests(Set<VendorStudentTest> tests) {        this.tests = tests;    }    public Long getVendorId() {        return vendorId;    }    public void setVendorId(Long vendorId) {        this.vendorId = vendorId;    }    public String getVendorName() {        return vendorName;    }    public void setVendorName(String vendorName) {        this.vendorName = vendorName;    }    public String getVendorPassword() {        return vendorPassword;    }    public void setVendorPassword(String vendorPassword) {        this.vendorPassword = vendorPassword;    }}Student.javapublic class Student {    private Long studentId;    private String studentName;    private String studentPassword;    private Set<VendorStudentTest> tests;    public Set<VendorStudentTest> getTests() {        return tests;    }    public void setTests(Set<VendorStudentTest> tests) {        this.tests = tests;    }    public Long getStudentId() {        return studentId;    }    public void setStudentId(Long studentId) {        this.studentId = studentId;    }    public String getStudentName() {        return studentName;    }    public void setStudentName(String studentName) {        this.studentName = studentName;    }    public String getStudentPassword() {        return studentPassword;    }    public void setStudentPassword(String studentPassword) {        this.studentPassword = studentPassword;    }}Test.javapublic class Test{        private Long testId;    private String testSubject;    private int testTotalNoOfQuestions;    private double testPrice;    public Long getTestId() {        return testId;    }    public void setTestId(Long testId) {        this.testId = testId;    }    public String getTestSubject() {        return testSubject;    }    public void setTestSubject(String testSubject) {        this.testSubject = testSubject;    }    public int getTestTotalNoOfQuestions() {        return testTotalNoOfQuestions;    }    public void setTestTotalNoOfQuestions(int testTotalNoOfQuestions) {        this.testTotalNoOfQuestions = testTotalNoOfQuestions;    }    public double getTestPrice() {        return testPrice;    }    public void setTestPrice(double testPrice) {        this.testPrice = testPrice;    }    public int getTestLevel() {        return testLevel;    }    public void setTestLevel(int testLevel) {        this.testLevel = testLevel;    }    public Set<Question> getTestQuestions() {        return testQuestions;    }    public void setTestQuestions(Set<Question> testQuestions) {        this.testQuestions = testQuestions;    }    private int testLevel;    private Set<Question> testQuestions;}VendorStudentTest.javapublic class VendorStudentTest {    private VendorStudentTestPK vendorStudentTestPK;    private Date assignedDate;    private Date purchasedDate;    private Date writtenDate;    private double result;    public VendorStudentTestPK getVendorStudentTestPK() {        return vendorStudentTestPK;    }    public void setVendorStudentTestPK(VendorStudentTestPK vendorStudentTestPK) {        this.vendorStudentTestPK = vendorStudentTestPK;    }    public Date getAssignedDate() {        return assignedDate;    }    public void setAssignedDate(Date assignedDate) {        this.assignedDate = assignedDate;    }    public Date getPurchasedDate() {        return purchasedDate;    }    public void setPurchasedDate(Date purchasedDate) {        this.purchasedDate = purchasedDate;    }    public Date getWrittenDate() {        return writtenDate;    }    public void setWrittenDate(Date writtenDate) {        this.writtenDate = writtenDate;    }    public double getResult() {        return result;    }    public void setResult(double result) {        this.result = result;    }}VendorStudentTestPK.javapublic class VendorStudentTestPK {    private Vendor vendor;    private Student student;    private Test test;    public VendorStudentTestPK() {        super();        // TODO Auto-generated constructor stub    }    public VendorStudentTestPK(Vendor vendor, Student student, Test test) {        super();        this.vendor = vendor;        this.student = student;        this.test = test;    }    public Vendor getVendor() {        return vendor;    }    public void setVendor(Vendor vendor) {        this.vendor = vendor;    }    public Student getStudent() {        return student;    }    public void setStudent(Student student) {        this.student = student;    }    public Test getTest() {        return test;    }    public void setTest(Test test) {        this.test = test;    }    @Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + ((student == null) ? 0 : student.hashCode());        result = prime * result + ((test == null) ? 0 : test.hashCode());        result = prime * result + ((vendor == null) ? 0 : vendor.hashCode());        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (!(obj instanceof VendorStudentTestPK))            return false;        VendorStudentTestPK other = (VendorStudentTestPK) obj;        if (student == null) {            if (other.student != null)                return false;        } else if (!student.equals(other.student))            return false;        if (test == null) {            if (other.test != null)                return false;        } else if (!test.equals(other.test))            return false;        if (vendor == null) {            if (other.vendor != null)                return false;        } else if (!vendor.equals(other.vendor))            return false;        return true;    }}Hibernate mapping files as follows:vendor.hbm.xml<class name=Vendor table=vendor>    <id name=vendorId type=long column=vendor_id>        <generator class=increment/>          </id>    <property name=vendorName column=vendor_name type=string/>    <property name=vendorPassword column=vendor_password type=string/>    <set name=tests table=vendor_student_test                inverse=true lazy=true fetch=select>            <key>                <column name=vendor_id not-null=true />            </key>            <one-to-many class=VendorStudentTest />        </set>  </class>vendor_student_test.hbm.xml<class name=Vendor table=vendor>    <composite-id name=vendorStudentTestPK        class=com.onlineexam.model.VendorStudentTestPK>        <key-property name=vendorId column=vendor_id            type=java.lang.Long />        <key-property name=studentId column=student_id            type=java.lang.Long />        <key-property name=testId column=test_id type=java.lang.Long />    </composite-id>    <many-to-one name=vendor class=Vendor insert=false update=false/>    <many-to-one name=student class=Student insert=false update=false/>    <many-to-one name=test class=Test insert=false update=false/>  </class>student.hbm.xml<class name=Student table=student>    <id name=studenId type=long column=student_id>        <generator class=increment/>          </id>    <property name=studentName column=student_name type=string/>    <property name=studentPassword column=student_password type=string/>    <set name=tests table=vendor_student_test                inverse=true lazy=true fetch=select>            <key>                <column name=student_id not-null=true />            </key>            <one-to-many class=VendorStudentTest />        </set>  </class>test.hbm.xml//this is mapped to other table I am new to hibernate.  Is this correct mapping?
Many-to-many hibernate mapping if link table is having extra columns mappings
java;beginner;hibernate