You are on page 1of 36

CHUYN JAVA

HIBERNATE MAPPING

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

Upload by Cafeitvn.com

Ni dung trnh by
Many to one

Lazy Initialization
Fetch Cascade

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

Upload by Cafeitvn.com

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


A
1 *

A PK IDA ... FK1 PK

B IDB ... IDA ...

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

Upload by Cafeitvn.com

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


Trong ng dng BookOnline

Mi u sch thuc v mt danh mc


Mi danh mc c th c nhiu u sch Mi quan h hng t u sch n danh mc c gi l mi quan h nhiu mt (many-to-one) Nu ch c mi quan h hng t sch n danh mc gi l mi quan h mt chiu (unidirectional association)

Nu mi quan h hng c t sch n danh mc v ngc li gi l mi quan h hai chiu (bidirectional association)
4

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

Upload by Cafeitvn.com

BookOnline
DanhMuc
1 *

Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc

- maDanhMuc : String - tenDanhMuc :String

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

Upload by Cafeitvn.com

DanhMuc POJO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package pojo; public class DanhMuc implements java.io.Serializable {

private String maDanhMuc; private String tenDanhMuc; public DanhMuc() { } public DanhMuc(String maDanhMuc, String tenDanhMuc) { this.maDanhMuc = maDanhMuc; this.tenDanhMuc = tenDanhMuc; } //Getters & Setters }

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

Upload by Cafeitvn.com

DanhMuc.hbm.xml
1 2 3 4 5 6 7 8 9 10 11 12 <hibernate-mapping> <class catalog="bookonline" name="pojo.DanhMuc" table="danhmuc"> <id name="maDanhMuc" type="string"> <column length="45" name="MaDanhMuc"/> <generator class="assigned"/> </id> <property name="tenDanhMuc" type="string"> <column length="45" name="TenDanhMuc" not-null="true"/> </property> </class> </hibernate-mapping>

DanhMuc
1 *

Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc

- maDanhMuc : String - tenDanhMuc :String

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

Upload by Cafeitvn.com

Sach POJO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package pojo; public class Sach implements java.io.Serializable { private String maSach; private DanhMuc danhMuc; private String tenSach; private String tacGia; private double giaBan; private int soLuong; private String hinhAnh;

//Constructors
//Getters & Setters

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

Upload by Cafeitvn.com

Sach.hbm.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 <hibernate-mapping> <class catalog="bookonline" name="pojo.Sach" table="sach"> <id name="maSach" type="string"> <column length="45" name="MaSach"/> <generator class="assigned"/> </id> . . . <many-to-one class="pojo.DanhMuc" name="danhMuc" fetch="select"> <column length="45" name="MaDanhMuc" not-null="true"/> </many-to-one> </class> </hibernate-mapping>
DanhMuc
1 *

Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc

- maDanhMuc : String - tenDanhMuc :String

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

Upload by Cafeitvn.com

SachDAO ly thng tin sch


Vit phng thc ly thng tin sch da vo m sch cng vi danh mc m n thuc v
DanhMuc
1 *

Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc

- maDanhMuc : String - tenDanhMuc :String

10

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

Upload by Cafeitvn.com

SachDAO ly thng tin sch


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class SachDAO { public static Sach layThongTinSach(String maSach) { Sach sach = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { sach = (Sach) session.get(Sach.class, maSach); } catch (HibernateException ex) { //Log the exception System.err.println(ex); } finally { session.close(); } return sach; } }

11

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

Upload by Cafeitvn.com

SachDAO ly thng tin sch


1 2 3 4 5 6 7 8 9 10 11 12 13 public class Main { public static void main(String[] args) { Sach sach = SachDAO.layThongTinSach("S001"); M danh mc if (sach != null) { c np DanhMuc dm = sach.getDanhMuc(); System.out.println(dm.getMaDanhMuc()); System.out.println(dm.getTenDanhMuc()); } M danh mc:DM001 Exception xy ra

12

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

Upload by Cafeitvn.com

SachDAO ly thng tin sch


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class SachDAO { public static Sach layThongTinSach(String maSach) { Sach sach = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { sach = (Sach) session.get(Sach.class, maSach); DanhMuc dm=sach.getDanhMuc(); System.out.println(dm.getMaDanhMuc()); System.out.println(dm.getTenDanhMuc());

OK

} catch (HibernateException ex) { //Log the exception System.err.println(ex); } finally {session.close();} return sach;
}

M danh mc:DM001 Danh mc: Java

13

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

Upload by Cafeitvn.com

SachDAO ly thng tin sch


Khi truy xut cc thuc tnh bn trong danh mc (ngoi m danh mc) t i tng sch bn trong session th hon ton c. Nhng khi truy xut cc thuc tnh bn trong danh mc (ngoi m danh mc) t i tng sch bn ngoi session th exception s xy ra. Trong Hibernate c ch ny c gi l Lazy Initialization

14

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

15

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

Upload by Cafeitvn.com

SachDAO ly thng tin sch


Vit phng thc ly thng tin sch da vo m sch cng vi danh mc m n thuc v
DanhMuc
1 *

Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc

- maDanhMuc : String - tenDanhMuc :String

16

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

Upload by Cafeitvn.com

Cch 1 ly thng tin danh mc t m danh mc


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class Main { public static void main(String[] args) { OK Sach sach = SachDAO.layThongTinSach("S001"); if (sach != null) { String maDanhMuc=sach.getDanhMuc().getMaDanhMuc(); DanhMuc dm = DanhMucDAO.layThongTinDanhMuc(maDanhMuc); System.out.println(dm.getMaDanhMuc()); System.out.println(dm.getTenDanhMuc()); } } }

M danh mc:DM001 Danh mc: Java

17

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

Upload by Cafeitvn.com

Cch 2 S dng Hibernate.initialize(Object obj)


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class SachDAO { public static Sach layThongTinSach(String maSach) { Sach sach = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { sach = (Sach) session.get(Sach.class, maSach); Hibernate.initialize(sach.getDanhMuc()); } catch (HibernateException ex) { //Log the exception System.err.println(ex); } finally { session.close(); } return sach; } }

18

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

Upload by Cafeitvn.com

Cch 2 S dng Hibernate.initialize(Object obj)


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class Main { public static void main(String[] args) { Sach sach = SachDAO.layThongTinSach("S001"); if (sach != null) { DanhMuc dm = sach.getDanhMuc(); System.out.println(dm.getMaDanhMuc()); System.out.println(dm.getTenDanhMuc()); } OK

}
}

M danh mc:DM001 Danh mc: Java

19

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

Upload by Cafeitvn.com

Cch 3: iu chnh thuc tnh lazy trong Sach.hbm.xml


1 2 3 4 5 6 7 8 9 10 11 12 13 <hibernate-mapping> <class catalog="bookonline" name="pojo.Sach" table="sach"> <id name="maSach" type="string"> <column length="45" name="MaSach"/> <generator class="assigned"/> </id> . . . <many-to-one class="pojo.DanhMuc" name="danhMuc" fetch="select" lazy="false" > <column length="45" name="MaDanhMuc" not-null="true"/> </many-to-one> </class> </hibernate-mapping>

20

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

Upload by Cafeitvn.com

Cch 3: iu chnh thuc tnh lazy trong Sach.hbm.xml


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class SachDAO { public static Sach layThongTinSach(String maSach) { Sach sach = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { sach = (Sach) session.get(Sach.class, maSach); } catch (HibernateException ex) { //Log the exception System.err.println(ex); } finally { session.close(); } return sach; } }

21

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

Upload by Cafeitvn.com

Cch 3: iu chnh thuc tnh lazy trong Sach.hbm.xml


1 2 3 4 5 6 7 8 9 10 11 12 public class Main { public static void main(String[] args) { Sach sach = SachDAO.layThongTinSach("S001"); if (sach != null) { DanhMuc dm = sach.getDanhMuc(); System.out.println(dm.getMaDanhMuc()); System.out.println(dm.getTenDanhMuc()); } } OK

} M danh mc:DM001 Danh mc: Java

22

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

Upload by Cafeitvn.com

Fetch
1 2 3 4 5 6 7 8 9 <hibernate-mapping> <class catalog="bookonline" name="pojo.Sach" table="sach"> . . . <many-to-one class="pojo.DanhMuc" name="danhMuc" fetch="select" lazy="false" > <column length="45" name="MaDanhMuc" not-null="true"/> </many-to-one> </class> </hibernate-mapping>

Vic tt lazy initialization cng vi c ch np i tng sch v danh mc theo c ch fetch = select , khi theo cch ny 2 cu lnh select c pht sinh truy vn ly thng tin i tng sch v i tng danh mc. iu ny c th khng hiu qu bi v cn truy xut vo c s d liu v thc hin truy vn hai ln.
23

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

Upload by Cafeitvn.com

Fetch
1 2 3 4 5 6 7 8 9 <hibernate-mapping> <class catalog="bookonline" name="pojo.Sach" table="sach"> . . . <many-to-one class="pojo.DanhMuc" name="danhMuc" fetch="join" lazy="false" > <column length="45" name="MaDanhMuc" not-null="true"/> </many-to-one> </class> </hibernate-mapping>

Thay c ch fetch = select thnh fetch = join, khi theo cch ny 1 cu lnh select c pht sinh duy nht bng cch kt bng truy vn ly thng tin cho i tng sch v i tng danh mc. fetch = join s hiu qu bi v ch cn truy xut vo c s d liu v thc hin truy vn mt ln.

24

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

Upload by Cafeitvn.com

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

public class SachDAO { public static Sach layThongTinSach(String maSach) { Sach sach = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { String hql="select s from Sach s where s.maSach=:maSach"; Query query=session.createQuery(hql); query.setString("maSach", maSach); sach = (Sach) query.uniqueResult(); } catch (HibernateException ex) { System.err.println(ex); } finally { session.close();} return sach; } Trong trng hp ny 2 cu lnh select vn c pht sinh truy vn ly }

thng tin i tng sch v i tng danh mc.

Bi v cu truy vn HQL u s c thng dch trc tip ra cu lnh SQL


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

Upload by Cafeitvn.com

Fetch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class SachDAO { public static Sach layThongTinSach(String maSach) { Sach sach = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { String hql="select s from Sach s left join fetch s.danhMuc where s.maSach=:maSach"; Query query=session.createQuery(hql); query.setString("maSach", maSach); sach = (Sach) query.uniqueResult(); } catch (HibernateException ex) { System.err.println(ex); } finally { session.close();} return sach; } }

26

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

Upload by Cafeitvn.com

Fetch
1 2 3 4 5 6 7 8 9 <hibernate-mapping> <class catalog="bookonline" name="pojo.Sach" table="sach"> . . . <many-to-one class="pojo.DanhMuc" name="danhMuc" fetch="join" lazy="false" > <column length="45" name="MaDanhMuc" not-null="true"/> </many-to-one> </class> </hibernate-mapping>

S dng truy vn left join trong HQL np thng tin cho cc i tng lazy (v d danh mc trong sch) Do cc i tng lazy ny c th c truy xut bn ngoi session

Cch ny thng chn tng tc thc thi v ty trng hp c np hay khng np thng tin cho i tng lazy.

27

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

Upload by Cafeitvn.com

Cascade
Cascade thng dng

none
delete save-update

28

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

Upload by Cafeitvn.com

Cascade : none
1 2 3 4 5 6 7 8 9 <hibernate-mapping> <class catalog="bookonline" name="pojo.Sach" table="sach"> . . . <many-to-one class="pojo.DanhMuc" name="danhMuc" fetch="join" lazy="false" cascade="none"> <column length="45" name="MaDanhMuc" not-null="true"/> </many-to-one> </class> </hibernate-mapping>

DanhMuc
1 *

Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc

- maDanhMuc : String - tenDanhMuc :String

29

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

Upload by Cafeitvn.com

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

public class SachDAO { public static boolean themSach(Sach sach) { Session session = HibernateUtil.getSessionFactory() .openSession(); if (SachDAO.layThongTinSach(sach.getMaSach()) != null) { return false; } boolean kq = true; Transaction transaction = null; try { transaction = session.beginTransaction(); session.save(sach); transaction.commit(); } catch (HibernateException ex) { transaction.rollback(); System.err.println(ex); kq = false; } finally {session.close();} return kq; }
Nguyn Hong Anh nhanh@fit.hcmus.edu.vn H KHTN - 2011

Upload by Cafeitvn.com

Cascade : none
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Main { public static void main(String[] args) { Sach sach=new Sach(); sach.setMaSach("S027"); sach.setTenSach("Hibernate 3"); sach.setGiaBan(200000); sach.setSoLuong(1000); sach.setHinhAnh("images/hibernate3.jpg"); sach.setTacGia("Nguyn Hong Anh"); DanhMuc dm = new DanhMuc("DM013", "Java2"); sach.setDanhMuc(dm); boolean kq=SachDAO.themSach(sach); } } Thm sch tht bi khi + Danh mc cha tn ti trong c s d liu + M sch tn ti trong c s d liu

31

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

Upload by Cafeitvn.com

Cascade : save-update
1 2 3 4 5 6 7 8 9 <hibernate-mapping> <class catalog="bookonline" name="pojo.Sach" table="sach"> . . . <many-to-one class="pojo.DanhMuc" name="danhMuc" fetch="join" lazy="false" cascade="save-update"> <column length="45" name="MaDanhMuc" not-null="true"/> </many-to-one> </class> </hibernate-mapping>

DanhMuc
1 *

Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc

- maDanhMuc : String - tenDanhMuc :String

32

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

Upload by Cafeitvn.com

Cascade : save-update
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Main { public static void main(String[] args) { Sach sach=new Sach(); sach.setMaSach("S027"); sach.setTenSach("Hibernate 3"); sach.setGiaBan(200000); sach.setSoLuong(1000); sach.setHinhAnh("images/hibernate3.jpg"); sach.setTacGia("Nguyn Hong Anh"); DanhMuc dm = new DanhMuc("DM013", "Java2"); sach.setDanhMuc(dm); boolean kq=SachDAO.themSach(sach); } } - Nu danh mc cha tn ti, hibernate s to danh mc vo c s d liu

33

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

Upload by Cafeitvn.com

Cascade : save-update
1 2 3 4 5 6 7 8 9 <hibernate-mapping> <class catalog="bookonline" name="pojo.Sach" table="sach"> . . . <many-to-one class="pojo.DanhMuc" name="danhMuc" fetch="join" lazy="false" cascade="save-update, delete"> <column length="45" name="MaDanhMuc" not-null="true"/> </many-to-one> </class> </hibernate-mapping>

DanhMuc
1 *

Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc

- maDanhMuc : String - tenDanhMuc :String

34

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

35

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

Upload by Cafeitvn.com

HI V P
Upload by Cafeitvn.com

36

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

You might also like