Hibernate 双向一对多表的关联

来源:互联网 发布:ipad应用网络连接失败 编辑:程序博客网 时间:2024/05/21 21:58

这里举的例子是班级-学生(1:N)的关系

1.首先班级学生实体类

班级

package enity;import java.util.HashSet;import java.util.Set;public class Grade implements java.io.Serializable {// Fieldsprivate Integer gid;private String gname;private String gdesc;private Set students = new HashSet(0);// Constructors/** default constructor */public Grade() {}/** minimal constructor */public Grade(String gname, String gdesc) {this.gname = gname;this.gdesc = gdesc;}/** full constructor */public Grade(String gname, String gdesc, Set students) {this.gname = gname;this.gdesc = gdesc;this.students = students;}// Property accessorspublic Integer getGid() {return this.gid;}public void setGid(Integer gid) {this.gid = gid;}public String getGname() {return this.gname;}public void setGname(String gname) {this.gname = gname;}public String getGdesc() {return this.gdesc;}public void setGdesc(String gdesc) {this.gdesc = gdesc;}public Set getStudents() {return this.students;}public void setStudents(Set students) {this.students = students;}}
学生实体类

package enity;public class Student implements java.io.Serializable {// Fieldsprivate Integer sid;private Grade grade;private String sname;private String sex;// Constructors/** default constructor */public Student() {}/** full constructor */public Student(Grade grade, String sname, String sex) {this.grade = grade;this.sname = sname;this.sex = sex;}// Property accessorspublic Integer getSid() {return this.sid;}public void setSid(Integer sid) {this.sid = sid;}public Grade getGrade() {return this.grade;}public void setGrade(Grade grade) {this.grade = grade;}public String getSname() {return this.sname;}public void setSname(String sname) {this.sname = sname;}public String getSex() {return this.sex;}public void setSex(String sex) {this.sex = sex;}}

映射文件

Grade.hbm.xml

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="enity.Grade" table="grade" catalog="testdatabase">        <id name="gid" type="java.lang.Integer">            <column name="gid" />            <generator class="increment" />        </id>        <property name="gname" type="java.lang.String">            <column name="gname" not-null="true" />        </property>        <property name="gdesc" type="java.lang.String">            <column name="gdesc" not-null="true" />        </property>        <set name="students" inverse="true">            <key>                <column name="gid" not-null="true" />            </key>            <one-to-many class="enity.Student" />        </set>    </class></hibernate-mapping>

student.hbm.xml

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="enity.Student" table="student" catalog="testdatabase">        <id name="sid" type="java.lang.Integer">            <column name="sid" />            <generator class="increment" />        </id>        <many-to-one name="grade" class="enity.Grade" fetch="select">            <column name="gid" not-null="true" />        </many-to-one>        <property name="sname" type="java.lang.String">            <column name="sname" not-null="true" />        </property>        <property name="sex" type="java.lang.String">            <column name="sex" not-null="true" />        </property>    </class></hibernate-mapping>

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration><session-factory><property name="myeclipse.connection.profile">database</property><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="connection.username">root</property><property name="connection.url">jdbc:mysql://localhost:3306/testdatabase</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="show_sql">true</property><property name="format_sql">true</property><property name="hbm2ddl.auto">create</property><mapping resource="enity/Student.hbm.xml" /><mapping resource="enity/Grade.hbm.xml" /></session-factory></hibernate-configuration>
测试

package testHibernate;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import org.omg.CORBA.PUBLIC_MEMBER;import enity.Grade;import enity.Student;import util.HibernateSessionFactory;public class test {@Testpublic void test(){Session session = HibernateSessionFactory.getSession();Transaction transaction = session.beginTransaction();Grade grade = new Grade("Java","i like java");Student student = new Student(grade,"xiaoxin","man");Student student1 = new Student(grade,"xiaohong","femal");session.save(grade);session.save(student);session.save(student1);transaction.commit();}}

测试成功

控制台


数据库(grade表)


student表


0 0