You are on page 1of 23

CHUYN JAVA

HIBERNATE MAPPING

ONE-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 mt-nhiu (one-to-many)


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 mt nhiu (one-to-many)


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) Mi quan h hng t danh mc sang sch c gi lm mi quan h mt-nhiu(one-to-many) Nu ch c mi quan h hng t sch n danh mc hoc ngc li 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)

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 - sachs : Set

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

Upload by Cafeitvn.com

DanhMuc

Sach
1 *

DanhMuc POJO - SET


1 2 3 4 5 6 7 8 9 10 11 12 13 import java.util.HashSet; import java.util.Set; public class DanhMuc

- maDanhMuc : String - tenDanhMuc :String - sachs : Set

- maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc

:String :String :String :double :int :String :DanhMuc

implements java.io.Serializable {

private String maDanhMuc; private String tenDanhMuc; private Set<Sach> sachs = new HashSet<Sach>(0);
//Cc phng thc khi to . . . //Getter & Setter . . .

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

Upload by Cafeitvn.com

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

DanhMuc
1 *

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

- maDanhMuc : String - tenDanhMuc :String - sachs : Set

<hibernate-mapping> <class 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> <set inverse="true" name="sachs" > <key> <column length="45" name="MaDanhMuc" not-null="true"/> </key> <one-to-many class="pojo.Sach"/> </set> </class> </hibernate-mapping>

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

DanhMuc
1 *

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

- maDanhMuc : String - tenDanhMuc :String - sachs : Set

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 - sachs : Set

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

Upload by Cafeitvn.com

DanhMucDAO ly thng tin danh mc


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

10

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

Upload by Cafeitvn.com

DanhMucDAO ly thng tin danh mc


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Main { public static void main(String[] args) { DanhMuc dm=DanhMucDAO.layThongTinDanhmuc("DM001"); System.out.println("M danh mc: "+dm.getMaDanhMuc()); System.out.println("Tn danh mc: "+dm.getTenDanhMuc()); Iterator<Sach> sachs=dm.getSachs().iterator(); while(sachs.hasNext()){ Sach s=sachs.next(); System.out.println("M sch:"+ s.getMaSach()); System.out.println("Tn sch: "+s.getTenSach()); System.out.println("Tc gi: "+s.getTacGia()); System.out.println("Gi bn: "+s.getGiaBan()); System.out.println("S lng: "+s.getSoLuong()); System.out.println("Hnh nh: "+s.getHinhAnh()); } } }

11

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

Upload by Cafeitvn.com

DanhMucDAO ly thng tin danh mc

Lazy = true

12

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

13

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

Upload by Cafeitvn.com

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

DanhMuc
1 *

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

- maDanhMuc : String - tenDanhMuc :String - sachs : Set

<hibernate-mapping> <class 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> <set inverse="true" name="sachs" fetch="join" lazy="false" > <key> <column length="45" name="MaDanhMuc" not-null="true"/> </key> <one-to-many class="pojo.Sach"/> </set> </class> </hibernate-mapping>

14

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

Upload by Cafeitvn.com

DanhMucDAO ly thng tin danh mc


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Main { public static void main(String[] args) { DanhMuc dm=DanhMucDAO.layThongTinDanhmuc("DM001"); System.out.println("M danh mc: "+dm.getMaDanhMuc()); System.out.println("Tn danh mc: "+dm.getTenDanhMuc()); Iterator<Sach> sachs=dm.getSachs().iterator(); while(sachs.hasNext()){ Sach s=sachs.next(); System.out.println("M sch:"+ s.getMaSach()); System.out.println("Tn sch: "+s.getTenSach()); System.out.println("Tc gi: "+s.getTacGia()); System.out.println("Gi bn: "+s.getGiaBan()); System.out.println("S lng: "+s.getSoLuong()); System.out.println("Hnh nh: "+s.getHinhAnh()); } } }

15

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

Upload by Cafeitvn.com

DanhMucDAO ly thng tin danh mc

Lazy = false

16

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

Upload by Cafeitvn.com

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

DanhMuc
1 *

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

- maDanhMuc : String - tenDanhMuc :String - sachs : Set

<hibernate-mapping> <class 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> <set inverse="true" name="sachs" > <key> <column length="45" name="MaDanhMuc" not-null="true"/> </key> <one-to-many class="pojo.Sach"/> </set> </class> </hibernate-mapping>

17

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

Upload by Cafeitvn.com

DanhMucDAO ly thng tin danh mc


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

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

Upload by Cafeitvn.com

DanhMucDAO ly thng tin danh mc


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Main { public static void main(String[] args) { DanhMuc dm=DanhMucDAO.layThongTinDanhmuc("DM001"); System.out.println("M danh mc: "+dm.getMaDanhMuc()); System.out.println("Tn danh mc: "+dm.getTenDanhMuc()); Iterator<Sach> sachs=dm.getSachs().iterator(); while(sachs.hasNext()){ Sach s=sachs.next(); System.out.println("M sch:"+ s.getMaSach()); System.out.println("Tn sch: "+s.getTenSach()); System.out.println("Tc gi: "+s.getTacGia()); System.out.println("Gi bn: "+s.getGiaBan()); System.out.println("S lng: "+s.getSoLuong()); System.out.println("Hnh nh: "+s.getHinhAnh()); } } }

19

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

Upload by Cafeitvn.com

DanhMucDAO ly thng tin danh mc

HQL

20

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

Upload by Cafeitvn.com

Cascade
save-update

delete
delete-orphan

21

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

22

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

Upload by Cafeitvn.com

HI V P
Upload by Cafeitvn.com

23

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

You might also like