You are on page 1of 27

CHUYN JAVA

HIBERNATE MAPPING

MANY-TO-MANY
Nguyn Hong Anh Email: nhanh@fit.hcmus.edu.vn H KHTN, 2011

Upload by Cafeitvn.com

Ni dung trnh by
One to many

Lazy Initialization
Fetch Cascade

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

Mi quan h nhiu-nhiu (many-to-many)


A
* *

AB PK A PK IDA ... ... PK IDA (FK) IDB (FK) PK B IDB ... ...

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

Mi quan h nhiu-nhiu (many-to-many)


Trong ng dng ng k hc phn

Mi sinh vin c th ng k nhiu kha hc


Mi kha hc c th c nhiu sinh vin ng k hc Mi quan h hng t sinh vin n kha hc v ngc li gi l mi quan h nhiu nhiu(many-to-many)

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

Many to many
SinhVien
1 * 1

KhoaHoc
*

- maSinhVien :String - tenSinhVien :String - email :String - diaChi :String - khoaHocs : Set<KhoaHoc>

- maKhoaHoc :String - tenKhoaHoc :String - sinhViens :Set<SinhVien>

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

Many to many
SinhVien
1 * 1

KhoaHoc
*

- maSinhVien :String - tenSinhVien :String - email :String - diaChi :String - khoaHocs : Set<KhoaHoc>

- maKhoaHoc :String - tenKhoaHoc :String - sinhViens :Set<SinhVien>

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVien

KhoaHoc
1 *

SinhVien POJO
1 2 3 4 5 6 7 8 9 10 11 12 13 public class SinhVien

- maSinhVien :String - maKhoaHoc :String * 1 - tenSinhVien :String - tenKhoaHoc :String - email :String - sinhViens :Set<SinhVien> - diaChi :String implements java.io.Serializable { - khoaHocs : Set<KhoaHoc>

private private private private private

String maSinhVien; String tenSinhVien; String email; String diaChi; Set<KhoaHoc> khoahocs = new HashSet<KhoaHoc>(0);

// Cc phng thc khi to . . . // Cc phng thc get/set . . .

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVien
1 * 1

KhoaHoc
*

SinhVien.hbm.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

<hibernate-mapping> <class catalog="quanlydangkyhocphan" name="pojo.SinhVien" table="sinhvien"> . . . <set inverse="false" name="khoahocs" table="khoahoc_sinhvien"> <key> <column length="10" name="MaSinhVien" not-null="true"/> </key> <many-to-many entity-name="pojo.KhoaHoc"> <column length="10 name="MaKhoaHoc" not-null="true"/> </many-to-many> </set> </class> </hibernate-mapping>

- maSinhVien :String - tenSinhVien :String - email :String - diaChi :String - khoaHocs : Set<KhoaHoc>

- maKhoaHoc :String - tenKhoaHoc :String - sinhViens :Set<SinhVien>

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVien

KhoaHoc
1 *

KhoaHoc POJO
1 2 3 4 5 6 7 8 9 10 11 12 public class KhoaHoc

- maSinhVien :String - maKhoaHoc :String * 1 - tenSinhVien :String - tenKhoaHoc :String - email :String - sinhViens :Set<SinhVien> - diaChi :String implements java.io.Serializable { - khoaHocs : Set<KhoaHoc>

private String maKhoaHoc; private String tenKhoaHoc; private Set<SinhVien> sinhviens = new HashSet<SinhVien>(0); // Cc phng thc khi to . . . // Cc phng thc get/set . . .

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVien
1 * 1

KhoaHoc
*

SinhVien.hbm.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

<hibernate-mapping> <class catalog="quanlydangkyhocphan" name="pojo.KhoaHoc" table="khoahoc"> . . . <set inverse="true" name="sinhviens" table="khoahoc_sinhvien"> <key> <column length="10" name="MaKhoaHoc" not-null="true"/> </key> <many-to-many entity-name="pojo.SinhVien"> <column length="10" name="MaSinhVien" not-null="true"/> </many-to-many> </set> </class> </hibernate-mapping>

- maSinhVien :String - tenSinhVien :String - email :String - diaChi :String - khoaHocs : Set<KhoaHoc>

- maKhoaHoc :String - tenKhoaHoc :String - sinhViens :Set<SinhVien>

10

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO ly thng tin sinh vin


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class SinhVienDAO { public static SinhVien layThongTinSinhVien(String maSinhVien) { SinhVien sv = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { sv =(SinhVien) session.get(SinhVien.class, maSinhVien); } catch (HibernateException ex) { System.err.println(ex); } finally { session.close(); } return sv; }

11

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO ly thng tin sinh vin


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Main { public static void main(String[] args) { SinhVien sv=SinhVienDAO.layThongTinSinhVien("0312143"); System.out.println(sv.getMaSinhVien()); System.out.println(sv.getTenSinhVien()); System.out.println(sv.getEmail()); System.out.println(sv.getDiaChi()); Iterator<KhoaHoc> khoaHocs=sv.getKhoahocs().iterator(); while(khoaHocs.hasNext()){ KhoaHoc kh=khoaHocs.next(); System.out.println(kh.getMaKhoaHoc()); System.out.println(kh.getTenKhoaHoc()); } } }

12

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO ly thng tin sinh vin

Lazy = true

13

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

Lazy Initialization
Trong Hibernate, Lazy Initialization gip

Trnh cc cu truy vn c s d liu khng cn thit


Gia tng hiu sut thc thi

Lazy mc nh c gi tr l true

14

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVien
1 * 1

KhoaHoc
*

SinhVien.hbm.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

<hibernate-mapping> <class catalog="quanlydangkyhocphan" name="pojo.SinhVien" table="sinhvien"> . . . <set inverse="false" name="khoahocs" fetch="join" lazy="false table="khoahoc_sinhvien"> <key> <column length="10" name="MaSinhVien" not-null="true"/> </key> <many-to-many entity-name="pojo.KhoaHoc"> <column length="10 name="MaKhoaHoc" not-null="true"/> </many-to-many> </set> </class> </hibernate-mapping>

- maSinhVien :String - tenSinhVien :String - email :String - diaChi :String - khoaHocs : Set<KhoaHoc>

- maKhoaHoc :String - tenKhoaHoc :String - sinhViens :Set<SinhVien>

15

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO ly thng tin sinh vin


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Main { public static void main(String[] args) { SinhVien sv=SinhVienDAO.layThongTinSinhVien("0312143"); System.out.println(sv.getMaSinhVien()); System.out.println(sv.getTenSinhVien()); System.out.println(sv.getEmail()); System.out.println(sv.getDiaChi()); Iterator<KhoaHoc> khoaHocs=sv.getKhoahocs().iterator(); while(khoaHocs.hasNext()){ KhoaHoc kh=khoaHocs.next(); System.out.println(kh.getMaKhoaHoc()); System.out.println(kh.getTenKhoaHoc()); } } }

16

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO ly thng tin sinh vin

Lazy = false

17

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVien
1 * 1

KhoaHoc
*

SinhVien.hbm.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

<hibernate-mapping> <class catalog="quanlydangkyhocphan" name="pojo.SinhVien" table="sinhvien"> . . . <set inverse="false" name="khoahocs" table="khoahoc_sinhvien"> <key> <column length="10" name="MaSinhVien" not-null="true"/> </key> <many-to-many entity-name="pojo.KhoaHoc"> <column length="10 name="MaKhoaHoc" not-null="true"/> </many-to-many> </set> </class> </hibernate-mapping>

- maSinhVien :String - tenSinhVien :String - email :String - diaChi :String - khoaHocs : Set<KhoaHoc>

- maKhoaHoc :String - tenKhoaHoc :String - sinhViens :Set<SinhVien>

18

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO ly thng tin sinh vin


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
19

public class SinhVienDAO { public static SinhVien layThongTinSinhVien(String maSinhVien) { SinhVien sv = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { String hql= " select sv "; hql +="from SinhVien sv left join fetch sv.khoahocs"; hql += " where sv.maSinhVien=:maSinhVien"; Query query = session.createQuery(hql); query.setString("maSinhVien", maSinhVien); sv = (SinhVien) query.uniqueResult(); } catch (HibernateException ex) { System.err.println(ex); } finally { session.close(); } return sv; }
Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO ly thng tin sinh vin


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Main { public static void main(String[] args) { SinhVien sv=SinhVienDAO.layThongTinSinhVien("0312143"); System.out.println(sv.getMaSinhVien()); System.out.println(sv.getTenSinhVien()); System.out.println(sv.getEmail()); System.out.println(sv.getDiaChi()); Iterator<KhoaHoc> khoaHocs=sv.getKhoahocs().iterator(); while(khoaHocs.hasNext()){ KhoaHoc kh=khoaHocs.next(); System.out.println(kh.getMaKhoaHoc()); System.out.println(kh.getTenKhoaHoc()); } } }

20

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO ly thng tin sinh vin

HQL

21

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO thm sinh vin


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public class SinhVienDAO { public static boolean themSinhVien(SinhVien sv) { Session session = HibernateUtil.getSessionFactory().openSession(); if (SinhVienDAO.layThongTinSinhVien(sv.getMaSinhVien()) != null) { return false; } boolean kq = true; Transaction transaction = null; try { transaction = session.beginTransaction(); session.saveOrUpdate(sv); transaction.commit(); } catch (HibernateException ex) { transaction.rollback(); System.err.println(ex); kq = false; } finally { session.close(); } return kq; }

22

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO thm sinh vin


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Main { public static void main(String[] args) { SinhVien sv=new SinhVien(); sv.setMaSinhVien("0312078"); sv.setTenSinhVien("Hong Minh Chu"); sv.setDiaChi("231 Phan ng Lu Bnh Thnh"); sv.setEmail("hoangminh@gmail.com"); KhoaHoc kh=new KhoaHoc(); kh.setMaKhoaHoc("KHNET"); kh.setTenKhoaHoc(".NET"); sv.getKhoahocs().add(kh); SinhVienDAO.themSinhVien(sv); } }

23

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

SinhVienDAO thm sinh vin

24

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

Cascade
save-update

delete

25

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

Ti liu tham kho


Nguyn Hong Anh, Tp bi ging v video mn chuyn Java, 2010 Gary Mak, Tp hng dn tng bc Hibernate, 2006

26

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

HI V P
Upload by Cafeitvn.com

27

Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

You might also like