hibernate中one-to-many執行個體一

來源:互聯網
上載者:User

參考:http://hi.baidu.com/ohaozy/blog/item/ed486a33bc83cf48ac4b5f75.html

下面是我調試過的代碼

通過簡單的例子說明這幾個關係:

以下測試都是在mysql5下完成,資料庫表是由hibernate.cfg.xml裡配置了。
one-to-many及many-to-one我以教師和學生的關係舉例,一個教師對應多個學生,反過來多個學生對應一個教師。

  1. 建類

Teacher.java

package com.sjtu.xw.pojo;<br />import java.util.HashSet;<br />import java.util.Set;<br />public class Teacher {<br />private long id;<br />private String teaName;<br />private Set students = new HashSet();<br />public long getId() {<br />return id;<br />}<br />public void setId(long id) {<br />this.id = id;<br />}<br />public String getTeaName() {<br />return teaName;<br />}<br />public void setTeaName(String teaName) {<br />this.teaName = teaName;<br />}</p><p>public Set getStudents() {<br />return students;<br />}<br />public void setStudents(Set students) {<br />this.students = students;<br />}<br />public String toString() {<br />return "Teacher:[teacherId=" + this.id + "/tteacherName="<br />+ this.teaName + "]";<br />}<br />}<br /> 

Student.java

package com.sjtu.xw.pojo;<br />public class Student {<br />private long id;<br />private String stuName;<br />public long getId() {<br />return id;<br />}<br />public void setId(long id) {<br />this.id = id;<br />}<br />public String getStuName() {<br />return stuName;<br />}<br />public void setStuName(String stuName) {<br />this.stuName = stuName;<br />}<br />public String toString() {<br />return "student:[studentId=" + this.id + "/tstudentName="<br />+ this.stuName + "]";<br />}<br />}<br /> 

Student.hbm.xml

<?xml version="1.0"?><br /><!DOCTYPE hibernate-mapping PUBLIC<br /> "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br /> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br /><hibernate-mapping package="com.sjtu.xw.pojo"><br /><class name="Student" table="student"><br /><id name="id" column="id"><br /><generator class="native"></generator><br /></id><br /><property name="stuName" column="studentName" length="30" /><br /></class><br /></hibernate-mapping> 

Teacher.hbm.xml

<?xml version="1.0"?><br /><!DOCTYPE hibernate-mapping PUBLIC<br /> "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br /> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br /><hibernate-mapping package="com.sjtu.xw.pojo"><br /><class name="Teacher" table="teacher"><br /><id name="id" column="id"><br /><generator class="native"></generator><br /></id><br /><property name="teaName" column="teacherName" length="30" /></p><p><set name="students" fetch="join" lazy="false"><br /><!--<br /><set name="students"><br /> --><br /><key column="teacherId"></key><br /><!--<br />這裡的column="teacherId" 是指明了在student表裡有一個teacherId的列名,是指向teacher表的外鍵<br />--><br /><one-to-many class="Student" /><br /></set><br /></class><br /></hibernate-mapping> 

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?><br /><!DOCTYPE hibernate-configuration PUBLIC<br /> "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br /> "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><br /><hibernate-configuration><br /> <session-factory><br /> <!-- Database connection settings --><br /> <property name="connection.driver_class">com.mysql.jdbc.Driver</property><br /> <property name="connection.url">jdbc:mysql://localhost:3306/coursems</property><br /> <property name="connection.username">root</property><br /> <property name="connection.password">root</property><br /> <property name="dialect">org.hibernate.dialect.MySQLDialect</property><br /> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property><br /> <property name="show_sql">false</property><br /> <mapping resource="com/sjtu/xw/pojo/Student.hbm.xml"/><br /> <mapping resource="com/sjtu/xw/pojo/Teacher.hbm.xml"/><br /> </session-factory><br /></hibernate-configuration> 

HibernateUtil.java

package com.sjtu.xw.util;</p><p>import org.hibernate.SessionFactory;<br />import org.hibernate.cfg.Configuration;<br />public class HibernateUtil {<br /> private static final SessionFactory sessionFactory = buildSessionFactory();<br /> private static SessionFactory buildSessionFactory() {<br /> try {<br /> // Create the SessionFactory from hibernate.cfg.xml<br /> return new Configuration().configure().buildSessionFactory();<br /> }<br /> catch (Throwable ex) {<br /> // Make sure you log the exception, as it might be swallowed<br /> System.err.println("Initial SessionFactory creation failed." + ex);<br /> throw new ExceptionInInitializerError(ex);<br /> }<br /> }<br /> public static SessionFactory getSessionFactory() {<br /> return sessionFactory;<br /> }<br />} 

Test.java

package com.sjtu.xw.test;<br />import java.util.List;<br />import org.hibernate.Session;<br />import org.hibernate.SessionFactory;<br />import org.hibernate.Transaction;<br />import com.sjtu.xw.pojo.Student;<br />import com.sjtu.xw.pojo.Teacher;<br />import com.sjtu.xw.util.HibernateUtil;<br />public class Test {<br />public static void main(String[] args)<br />{<br />Test test=new Test();<br />//test.addStudent();<br />//test.addTeacher();<br />test.test();<br />}<br />public void addStudent() {<br />Student student = new Student();<br />student.setStuName("student6");<br />SessionFactory sf = HibernateUtil.getSessionFactory();<br />Session session = sf.openSession();<br />Transaction tx = session.beginTransaction();<br />session.save(student);<br />tx.commit();<br />session.close();<br />sf.close();<br />}<br />public void addTeacher() {<br />Student student = new Student();<br />student.setId(3);<br />Teacher teacher = new Teacher();<br />teacher.setTeaName("Teacher1");<br />teacher.getStudents().add(student); // 把id為1的學生添加到教師對象<br />// 儲存這個教師的同時會更新student表<br />SessionFactory sf = HibernateUtil.getSessionFactory();<br />Session session = sf.openSession();<br />Transaction tx = session.beginTransaction();<br />session.save(teacher);<br />tx.commit();<br />session.close();<br />sf.close();<br />}<br />public void test()<br />{<br />SessionFactory sf = HibernateUtil.getSessionFactory();<br />Session session = sf.openSession();<br />Transaction tx = session.beginTransaction();</p><p> List list = session.createQuery("from Teacher t where t.id=1").list();<br /> //List list = session.createQuery("from Teacher t left join fetch t.students where t.id=1").list();</p><p> Teacher t = (Teacher)list.get(0);</p><p> System.out.println(t);//<br /> System.out.println(t.getStudents().iterator().next());<br /> for(int i=0;i<list.size();i++)<br /> {<br /> Teacher tt = (Teacher)list.get(i);<br /> System.out.println(tt);//<br /> System.out.println(tt.getStudents().iterator().next());<br /> }</p><p>/*//未明白什麼意思,和session有什麼關係呢?<br /> * 上面這句話放在session結束前,student在用到的時候將會自動被查詢出來,否則查詢語句應改為:<br /> * from Teacher t left join fetch t.students where t.id=1<br /> * 或者設定teacher.hbm.xml裡的set屬性,加上:fetch="join" lazy="false":<br /> * <set name="students" fetch="join" lazy="false"><br /> * <key column="teacherId"></key> <one-to-many class="model.Student"/> </set><br /> */<br />tx.commit();<br />session.close();<br />sf.close();<br />}<br />} 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.