歡迎您光臨本站 註冊首頁

Hibernate一對多單向關係

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  1. 資料庫schema

  Teachers表:

  create table TEACHERS

  (

  ID NUMBER(10) not null,

  TEACHERNAME VARCHAR2(15)

  )

  alter table TEACHERS

  add constraint DERE primary key (ID)

  Students表:

  create table STUDENTS

  (

  ID NUMBER(10) not null,

  STUDENTNAME VARCHAR2(15),

  TEACHER_ID NUMBER(10)

  )

  alter table STUDENTS

  add constraint RERE primary key (ID)

  alter table STUDENTS

  add constraint FFF foreign key (TEACHER_ID)

  references TEACHERS (ID);

  2. Teacher.java和Student.java

  Teacher.java

  package mypack;

  public class Teacher {

  //教師id

  private Long id;

  //教師名稱

  private String teacherName;

  /**

  * 預設構造函數

  */

  public Teacher() {

  }

  /**

  * 得到教師id

  * @return Long 教師id

  */

  public Long getId() {

  return id;

  }

  /**

  * 設置教師id

  * @param id Long 教師id

  */

  public void setId(Long id) {

  this.id = id;

  }

  /**

  * 得到教師名稱

  * @return String 教師名稱

  */

  public String getTeacherName() {

  return teacherName;

  }

  /**

  * 設置教師名稱

  * @param teacherName String 教師名稱

  */

  public void setTeacherName(String teacherName) {

  this.teacherName = teacherName;

  }

  /**

  * 構造函數

  * @param teacherName String

  */

  public Teacher(String teacherName) {

  this.teacherName = teacherName;

  }

  }

  Student.java

  package mypack;

  public class Student {

  //學生id

  private Long id;

  //學生名稱

  private String studentName;

  //教師類

  private Teacher teacher;

  /**

  * 預設構造函數

  */

  public Student() {

  }

  /**

  * 得到學生id

  * @return Long 學生id

  */

  public Long getId() {

  return id;

  }

  /**

  * 設置學生id

  * @param id Long 學生id

  */

  public void setId(Long id) {

  this.id = id;

  }

  /**

  * 得到學生名稱

  * @return String 學生名稱

  */

  public String getStudentName() {

  return studentName;

  }

  /**

  * 設置學生名稱

  * @param studentName String 學生名稱

  */

  public void setStudentName(String studentName) {

  this.studentName = studentName;

  }

  /**

  * 得到教師對象

  * @return Teacher 教師對象

  */

  public Teacher getTeacher() {

  return teacher;

  }

  /**

  * 設置教師對象

  * @param teacher Teacher 教師對象

  */

  public void setTeacher(Teacher teacher) {

  this.teacher = teacher;

  }

  /**

  * 構造函數

  * @param string String

  * @param teacher Teacher

  */

  public Student(String studentName, Teacher teacher) {

  this.studentName = studentName;

  this.teacher = teacher;

  }

  }

  3. hibernate.properties

  ## Oracle

  hibernate.dialect net.sf.hibernate.dialect.Oracle9Dialect

  hibernate.dialect net.sf.hibernate.dialect.OracleDialect

  hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver

  hibernate.connection.username jbcm

  hibernate.connection.password jbcm

  hibernate.connection.url jdbc:oracle:thin:@localhost:1521:wsy

  4. Teacher.hbm.xml和Student.hbm.xml

  Teacher.hbm.xml

  <?xml version="1.0"?>

  <!DOCTYPE hibernate-mapping

  PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"

  "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

  <hibernate-mapping >

  <class name="mypack.Teacher" table="teachers" >

  <id name="id" type="long" column="ID">

  <generator class="increment"/>

  </id>

  <property name="teacherName" type="string" >

  <column name="teacherName" length="15" />

  </property>

  </class>

  </hibernate-mapping>

  Student.hbm.xml

  <?xml version="1.0"?>

  <!DOCTYPE hibernate-mapping

  PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"

  "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

  <hibernate-mapping >

  <class name="mypack.Student" table="students" >

  <id name="id" type="long" column="ID">

  <generator class="increment"/>

  </id>

  <property name="studentName" type="string" >

  <column name="studentName" length="15" />

  </property>

  <many-to-one

  name="teacher"

  column="teacher_id"

  class="mypack.Teacher"

  cascade="save-update"

  />

  </class>

  </hibernate-mapping>

  

  5. 資料庫操作類

  BusinessService.java

  package mypack;

  import net.sf.hibernate.*;

  import net.sf.hibernate.cfg.Configuration;

  import java.util.*;

  public class BusinessService{

  //session工廠類

  public static SessionFactory sessionFactory;

  //實始化session工廠

  static{

  try{

  //建立配置類,添加Student類和Teacher類

  Configuration config = new Configuration();

  config.addClass(Student.class)

  .addClass(Teacher.class);

  //得到sessionFactory對象

  sessionFactory = config.buildSessionFactory();

  }catch(Exception e){e.printStackTrace();}

  }

  /**

  * 通過學生類,查找教師類

  * @param student Student

  * @throws Exception

  * @return List

  */

  public List findTeacherByStudent(Student student) throws Exception{

  Session session = sessionFactory.openSession();

  Transaction tx = null;

  try {

  tx = session.beginTransaction();

  List orders=(List)session.find("from Student as o where o.teacher.id=" student.getId());

  tx.commit();

  return orders;

  }catch (Exception e) {

  if (tx != null) {

  tx.rollback();

  }

  throw e;

  } finally {

  session.close();

  }

  }

  /**

  * 查找指定id的學生類

  * @param student_id long

  * @throws Exception

  * @return Student

  */

  public Student findStudent(long student_id) throws Exception{

  Session session = sessionFactory.openSession();

  Transaction tx = null;

  try {

  tx = session.beginTransaction();

  Student student=(Student)session.load(Student.class,new Long(student_id));

  tx.commit();

  return student;

  }catch (Exception e) {

  if (tx != null) {

  //發生錯誤,回滾

  tx.rollback();

  }

  throw e;

  } finally {

  //沒有錯誤,關閉session

  session.close();

  }

  }

  /**

  * 級連保存Teacher對象和Student對象

  * @throws Exception

  */

  public void saveTeacherAndStudentWithCascade() throws Exception{

  Session session = sessionFactory.openSession();

  Transaction tx = null;

  try {

  tx = session.beginTransaction();

  Teacher teacher=new Teacher("myTeacher");

  Student student1=new Student("student1",teacher);

  Student student2=new Student("student2",teacher);

  session.save(student1);

  session.save(student2);

  tx.commit();

  }catch (Exception e) {

  if (tx != null) {

  //發生錯誤,回滾

  tx.rollback();

  }

  e.printStackTrace();

  } finally {

  // 沒有錯誤,關閉session

  session.close();

  }

  }

  /**

  * 保存教師和學生對象

  * @throws Exception

  */

  public void saveTeacherAndStudent() throws Exception{

  Session session = sessionFactory.openSession();

  Transaction tx = null;

  try {

  tx = session.beginTransaction();

  Teacher teacher=new Teacher("teacher1");

  session.save(teacher);

  Student student1=new Student("student001",teacher);

  Student student2=new Student("student002",teacher);

  session.save(student1);

  session.save(student2);

  //提交事務

  tx.commit();

  }catch (Exception e) {

  if (tx != null) {

  //發生錯誤,回滾

  tx.rollback();

  }

  throw e;

  } finally {

  // 沒有錯誤,關閉session

  session.close();

  }

  }

  /**

  * 輸出學生對象集合

  * @param students List

  */

  public void printStudents(List students){

  for (Iterator it = students.iterator(); it.hasNext();) {

  Student student=(Student)it.next();

  System.out.println("OrderNumber of " student.getTeacher().getTeacherName() " :" student.getStudentName());

  }

  }

  /**

  * 測試方法

  * @throws Exception

  */

  public void test() throws Exception{

  saveTeacherAndStudent();

  // saveTeacherAndStudentWithCascade();

  // Student student=findStudent(1);

  // List students=findTeacherByStudent(student);

  // printStudents(students);

  }

  public static void main(String args[]) throws Exception {

  new BusinessService().test();

  sessionFactory.close();

  }

  }

  目錄結構示意:

  Classes

  Hibernate.property

  /mypack

  Teacher.java

  Student.java

  BusinessService.java

  Teacher.hbm.xml

  Student.hbm.xml


[火星人 ] Hibernate一對多單向關係已經有235次圍觀

http://coctec.com/docs/java/show-post-60478.html