Académique Documents
Professionnel Documents
Culture Documents
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
Upload by Cafeitvn.com
Upload by Cafeitvn.com
Nu mi quan h hng c t sch n danh mc v ngc li gi l mi quan h hai chiu (bidirectional association)
4
Upload by Cafeitvn.com
BookOnline
DanhMuc
1 *
Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc
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 }
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
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
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
Upload by Cafeitvn.com
Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc
10
Upload by Cafeitvn.com
11
Upload by Cafeitvn.com
12
Upload by Cafeitvn.com
OK
} catch (HibernateException ex) { //Log the exception System.err.println(ex); } finally {session.close();} return sach;
}
13
Upload by Cafeitvn.com
14
Upload by Cafeitvn.com
Lazy Initialization
Trong Hibernate, Lazy Initialization gip
Lazy mc nh c gi tr l true
15
Upload by Cafeitvn.com
Sach - maSach - tenSach - tacGia - giaBan - soLuong - hinhAnh - danhMuc :String :String :String :double :int :String :DanhMuc
16
Upload by Cafeitvn.com
17
Upload by Cafeitvn.com
18
Upload by Cafeitvn.com
}
}
19
Upload by Cafeitvn.com
20
Upload by Cafeitvn.com
21
Upload by Cafeitvn.com
22
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
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
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 }
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
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
Upload by Cafeitvn.com
Cascade
Cascade thng dng
none
delete save-update
28
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
29
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
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
32
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
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
34
Upload by Cafeitvn.com
35
Upload by Cafeitvn.com
HI V P
Upload by Cafeitvn.com
36