Thứ Năm, 11 tháng 8, 2016

Hibernate One-to-One Relationship dùng DB SQL Server – Mối quan hệ 1-1 giữa 02 đối tượng sử dụng Hibernate trên CSDL SQL Server

Hibernate One-to-One Relationship – Mối quan hệ 1-1 giữa 02 đối tượng sử dụng Hibernate

Hibernate One-to-One Relationship dùng DB SQL Server – Mối quan hệ 1-1 giữa 02 đối tượng sử dụng Hibernate trên CSDL SQL Server

 

Mục đích: Mục đích của chủ đề này nhằm mở rộng chủ đề “Hibernate One-to-One Relationship” sử dụng DB MySQL (https://www.facebook.com/TrongKhanh.Kieu/posts/276354746070572) . Ở đây, chúng tôi sẽ thực hiện mối quan hệ 1-1 giữa 02 object cũng dùng Hibernate nhưng sử dụng DB SQL Server. Bên cạnh đó, chúng tôi sẽ đưa ra một số thủ thuật và lưu ý khi thực hiện cài đặt Hibernate có quan hệ trên CSDL dùng SQL Server. Ngoài ra, chúng tôi cho thấy sự khác nhau khi cài đặt Hibernate có mối quan hệ giữa DB SQL Server và My SQL

Hibernate One-to-One Relationship dùng DB SQL Server – Mối quan hệ 1-1 giữa 02 đối tượng sử dụng Hibernate trên CSDL SQL Server

 

Mục đích: Mục đích của chủ đề này nhằm mở rộng chủ đề “Hibernate One-to-One Relationship” sử dụng DB MySQL (https://www.facebook.com/TrongKhanh.Kieu/posts/276354746070572). Ở đây, chúng tôi sẽ thực hiện mối quan hệ 1-1 giữa 02 object cũng dùng Hibernate nhưng sử dụng DB SQL Server. Bên cạnh đó, chúng tôi sẽ đưa ra một số thủ thuật và lưu ý khi thực hiện cài đặt Hibernate có quan hệ trên CSDL dùng SQL Server. Ngoài ra, chúng tôi cho thấy sự khác nhau khi cài đặt Hibernate có mối quan hệ giữa DB SQL Server và My SQL

 

Yêu cầu:

·         Nắm vững cách cài đặt đối tượng sử dụng Hibernate 3.2.5 (vui lòng xem lại bài Hibernate 3.2.5 in MVC Web Application with NetBeans 6.9.1 and SQL Server 2005 (https://www.facebook.com/TrongKhanh.Kieu/posts/276067172765996) )

·         Nắm vững cách cài đặt mối quan hệ 1-1 giữa 02 object sử dụng Hibernate (vui lòng xem lại bài Hibernate One-to-One Relationship cài đặt trên MySQL (https://www.facebook.com/TrongKhanh.Kieu/posts/276354746070572) )

·         Nắm vững kiến thức về OOP

·         Nắm vững kiến thức về mối quan hệ giữa các object khi vận dụng và cài đặt

·         Tools yêu cầu

o   NetBean IDE 6.9.1

o   JDK 6 update 22

o   Apache Tomcat v6.0.26

o   MS. SQL Server 2005

 

Trong phần nội dung này chúng tôi sẽ làm ví dụ trên mối quan hệ một client chỉ có địa chỉ address và một address chỉ có thuộc duy nhất một client (ví dụ này tương tự như nội dung trong bài CMR 1_1 của EJB https://www.facebook.com/TrongKhanh.Kieu/posts/274832709556109). Dữ liệu mô tả như sau

Ở bài này, chúng tôi sẽ thực hiện hai chức năng chính đó là tạo mới thông tin 1 client và thực hiện tìm kiếm thông tin liên quan đến Client khi biết một ký tự bất kỳ trong phần tên của clientName. Từ kết quả tìm kiếm, chúng ta sẽ thực hiện delete và update một số thông tin bất kỳ của một client được chọn lựa trên lưới của kết quả tìm kiếm

Lưu ý:

·         Kéo khóa chinh từ bảng tblClient sang bảng tblAddress để DBMS xem như tblClient là bảng cha, còn tblAddress là bảng con. Nếu thực hiện kéo dữ liệu từ bảng tblAddress sang tblClient thì code và cách vận dụng sẽ phát sinh khác

·         Bạn sẽ làm được tất cả nội dung nêu trên khi bạn nắm chắc bản chất vấn đề của nội dung này

·         Chi tiết của các bảng trên được mô tả cụ thể như sau

 

 

Trong phần tutorial này chúng tôi sẽ chưa một nhóm cách động thành các bước riêng biệt để tạo thuận lợi cho quí vị có thể tiếp cận dễ dàng và có thể thực hiện trong các bài hướng dẫn tiếp theo. Trong phần tutorial này chúng tôi sẽ thực hiện nhóm cách động tương tự các bước trong bài tutorial CMR 1:1 và Hibernate One-One Relationship sử dụng MySQL

 

Bước 1: Đăng ký Datasource với Netbeans để Netbeans hỗ trợ chúng ta trong việc phát sinh datasource (bước này có thể bỏ qua nếu bạn đã có datasource rồi) (Vui lòng xem chi tiết Bước 1 trong tutorial CMR 1:1 https://www.facebook.com/TrongKhanh.Kieu/posts/274832709556109)

  • Nếu Datasource với DB mà có chứa các bảng mà chúng ta thao tác đã được đăng ký rồi,
    • Vào trong tab Services, mở rộng phần Database
    • Click phải chuột trên connection mà chúng ta cần làm việc, chọn Connect …

    • Chúng ta nhập username và password để kết nối DB, click OK

Lưu ý: Một Database Connection chỉ dùng cho một DB cụ thể, không thể áp dụng cho tất cả các Database vì mỗi Database Connect có 1 chuỗi kết nối đến một DB cụ thể

 

Bước 2: Tạo Web Application Project tương tự như bài Hibernate One-One relationship kết hợp với MySQL

1.       Nhập tên project là HibernateOneOne

2.       Chọn Server là Apache Tomcat 6.0.26 và Java EE version là Java EE5.

3.       Chọn framework cho project là Hibernate 3.2.5

Chọn Database Connection và Database Dialect như hình vẽ:

Lưu ý: điểm khác biệt khi chọn SQL Server với MySQL đó là Database Dialect không được chọn sẵn, chúng ta phải chọn nội dung này bằng tay trực tiếp trong project

Project được tạo mới như sau

Configure file hibernate.cfg.xml tương tự như bài Hibernate 3.2.5 in MVC Web Application with NetBean 6.9.1 and SQL Server 2005

Mục Configuration Properties

Thêm mới Property Name hibernate.dialect, chọn Property Value phù hợp với SQL Server là org.hibernate.dialect.SQLServerDialect.

Thêm mới Property Name: hibernate.show_sql và Property value: true

Kết quả chúng ta thấy như sau

 

Trong node SessionFactory à Optional Properties à Miscellaneous Properties, click Add.

Chọn Property Name: hibernate.current_session_context_class và Property value: thread.

Click Add và chọn Property Name: hibernate.query.factory_class và Property value: org.hibernate.hql.ast.ASTQueryTranslatorFactory

Lưu lại file và đổi sang mode XML, chúng ta thấy tập tin hibernate.cfg.xml như sau

Tạo file HibernateUtil.java - Helper file tương tự như bài Hibernate kết hợp với MySQL

Tạo Hibernate Mapping File và POJO tương tự như bài Hibernate kết hợp với MySQL

·         Tạo Hibernate Reverse Engineering file hibernate.reveng.xml tương tự như bài Hibernate kết hợp với MySQL nhưng chọn bảng là tblAddress (đây là bảng con, nên khi nhấn Add qua thì bảng cha tblClient sẽ được add qua theo với bảng tblAddress)

·         Tạo Hibernate Mapping File và POJO tương tự như bài Hibernate kết hợp với MySQL. Thực hiện các thao tác và nhập package là sampe.oneone

Lưu ý: Check vào JDK 5 Language Features.

            Chúng ta có cấu trúc project sau bước này như sau

Bước 3: Cấu hình quan hệ 1-1 tương tự như bài Hibernate One-One relationship kết hợp với MySQL

  • NetBean hiểu quan hệ giữa 2 table này la One-to-Many nên code được generate có phần không đúng với mục đích của chúng ta. Chúng ta cần sửa lại những file sau:

1.       File TblClient.java: Chúng ta sửa lại kiểu dữ liệu, tên, constructor và get/set của thuộc tính tblAddresses như sau (áp dụng tương tự như bài Hibernate One-One relationship kết hợp với MySQL):

2.       File TblClient.hbm.xml

File TblClient.hbm.xml đang được cấu hình cho quan hệ One-to-Many, do vậy, chúng ta phải thực hiện chỉnh sửa thành quan hệ one – one tương tự như bài Hibernate One-One relationship kết hợp với MySQL:

Lưu ý:

    • Tên điền trong param name=”property” chính là tên thuộc tính được khai báo trong tập tin TblClient.java (cụ thể ở đây là field quan hệ tblAddresses)
    • Giá trị điền có phân biệt hoa thường – case sensitive
    • Trong quá trình đồng bộ dữ liệu từ object xuống DB cụ thể, cơ chế của Hibernate áp dụng tương tự như EJB, đó là bảng chính sẽ đống bộ xuống bảng phụ (theo nghĩa là bảng được kéo sang bảng khác là bảng cha - ở đây là tblClient, bảng còn lại sẽ là bảng con tblAddress). Do khái niệm này, chúng ta phải cấu hình việc đồng bộ từ bảng chính nghĩa là tập tin TblClient.hbm.xml phải thực hiện đồng bộ giá trị xuống bảng con có chứa khóa ngoại qua giá trị foreign trong khung màu đỏ nêu trên (chúng ta đang reference tblAddress là một object có chứa khóa quan hệ cần đồng bộ)
    • Chúng ta sẽ phải chỉnh sửa mối quan hệ thành one-one tag bởi vì chúng ta đang thao tác mối quan hệ 1-1, một lần nữa giá trị name được điền phải là thuộc tính được khai báo trong tập tin TblClient.java (cụ thể là tblAddresses) và đặc biệt phải trùng với giá trị foreign key đồng bộ đã nên ra ở trên

3.       File TblAddress.hbm.xml: Chúng ta cấu hình lại tương tự như bài Hibernate One-One relationship kết hợp với MySQL như sau

Lưu ý:

·         Chúng ta sẽ phải chỉnh sửa mối quan hệ thành one-one tag bởi vì chúng ta đang thao tác mối quan hệ 1-1, một lần nữa giá trị name được điền phải là thuộc tính được khai báo trong tập tin TblAddress.java (cụ thể là tblClient)

·         Đây là bảng phụ, do vậy, khóa ngoại của bảng tblAddress cũng chính là khóa chính và dữ liệu được đồng bộ từ bảng chính (đã được cấu hình ở phần trước), do vậy, các phần thuộc tính không cần cấu hình gì cả

Bước 4: Tạo Data Access Object – DAO để hỗ trợ truy cập các thành phần của Hibernate tương tự khái niệm Session Bean của EJB (nội dung cài đặt tương tự như bài Hibernate One-One relationship kết hợp với MySQL)

1.       Tạo mới class Java, đặt tên là ClientDAO , package là sample.oneone:

2.       Implement class DAO tương tự như bài Hibernate One-One relationship kết hợp với MySQL như sau:

·         Tạo hàm insert() với 5 tham số để thực hiện insert dữ liệu xuống 02 bảng quan hệ và chỉ cần truyền 5 tham số bởi vì khóa ngoại sẽ tự động đồng bộ xuống object thông qua các tập tin cấu hình đã thực hiện trong các bước trên. Các thứ tư thực hiện như sau

                                                              i.      Chúng ta phải áp dụng transaction vì chúng ta đang thực hiện đồng bộ trên 02 object và 02 bảng có mối quan hệ, do vậy cần phải có transaction để nội dung đồng bô là đồng nhất tương tự như khái niệm trong CMR của EJB

                                                            ii.      Tạo mới object của bảng cha (ở đây là TblClient)

                                                          iii.      Tạo mới object của bảng con (ở đây là TblAddress) và reference đến bảng cha để tham chiếu khóa chính của cha làm khóa ngoại của con - ở đây reference đến object của cha tạo ra ở trên

                                                           iv.      Thực hiện reference cha đến con tương tự như khái niệm CMR của EJB và đây là mối quan hệ one – one trên cả 02 phía – bidirectional

                                                             v.      Chỉ thực hiện cập nhật bảng cha và chính phần cấu hình cascade sẽ thực hiện đồng bộ nội dung bảng con (đó là lý do, chúng ta phải dùng transaction)

·         Tạo hàm update cho phép cập nhật tên client, số phone, địa chỉ nhà và địa chỉ văn phòng khi biết id:

                                                              i.      Vì đây là quan hệ 1-1 nên tìm ở đối tượng nào cũng được thông qua hàm get của session

                                                            ii.      Thực hiện các hàm set để update dữ liệu

                                                          iii.      Đối với bảng và đối tượng của bảng quan hệ, chúng ta phải dùng hàm get để lấy object của bảng quan hệ và thực hiện hàm set để cập nhật dữ liệu bên bảng quan hệ

                                                           iv.      Thực hiện đồng bộ đối tượng và lần nữa chúng ta chỉ cần đồng bộ bởi vì cơ chế transaction và cấu hình đảm bảo chúng ta sẽ đồng bộ dữ liệu trên các bảng quan hệ

·         Tạo hàm delete để xóa một client khi biết id: Thực hiện tương tự như khái niệm update là tìm kiếm nhưng thực hiện delete để xóa dữ liệu

·         Tạo hàm searchLikeClientname() để tìm tập các client chỉ cần tên có chứa một ký tự trong field clientName – ở đây chúng ta sẽ áp dụng câu lệnh truy vấn tương tự bài Hibernate cơ bản áp dụng chỉ với 1 bảng:

Bước 5: Tạo Giao diện để consume ứng dụng đã được thực hiện ở các bước trước

1.       Import thư viện JSTL 1.1 vào project để giao diện sử dụng JSTL để trình bày

2.       Tạo menu – menu.jsp có 02 link cho phép tạo mới user và tìm kiếm user mới.

·         Chỉnh sửa web.xml để tập tin này chạy đầu tiên khi ứng dụng khởi động

·         Tạo Servlet với tên Controller với package sample.web để thực hiện xử lý

3.       Tạo giao diện để thực hiện insert dữ liệu xuống DB – chỉnh sửa trang index.jsp

 

·         Cập nhật Controller cho việc insert, khi insert xong quay trở lại menu page

·         Thực hiện build, deploy và testing ứng dụng như sau

                                                              i.      DB trước khi insert

 

                                                            ii.      Thực hiện insert dữ liệu

                                                          iii.      DB sau khi insert

4.       Tạo giao diện để thực hiện việc search dưới DB – tập tin search.jsp

·         Cập nhật Controller cho việc xử lý search

·         Tạo trang show.jsp để trình bày kết quả

Lưu ý: giá trị lấy các hàng sử dụng EL và JSTL áp dụng như khái niện EJB, các giá trị sau thuộc tính rows là các attribute có tồn tại hàm cài đặt get tương ứng trong các class của Hibernate. Khi truy cập không cần dùng hàm get mà dùng dấu chấm “.”

·         Build and Clean, Deploy và Test

Cấu trúc của Project được cập nhật như sau

5.       Thực hiện chức năng delete trực tiếp trên lưới tìm kiếm.

·         Chỉnh sửa tập tin show.jsp như sau (lưu ý phải thực hiện kỹ thuật lưu lại tham số để trang web refresh sau khi delete)

·         Cập nhật Controller cho xử lý Delete:

·         Clean and build, run project.

Thực hiện xóa hàng ejbnew bằng cách click nút Delete

Database sẽ thực hiện xóa trên cả 02 bảng nội dung của được thực hiện

6.       Thực hiện chức năng update cho ứng dụng

·         Cập nhật trang show.jsp bổ sung nút Update và mỗi hàng chứa một form dùng kỹ thuật hidden form field

·         Cập nhật Controller thực hiện xử lý update

·         Clean and Build, Deploy và Test

 

Chỉnh sửa giá trị như clientName của SQLHiber11 xóa đi số 1, phone thêm số 8, Home bỏ số 1 và address thêm .net

Dữ liệu đã được đồng bộ của DB. Chúc mừng đã hoàn tất việc cấu hình và sử dụng các chức năng sử dụng Hibernate để thực hiện đồng bộ dữ liệu giữa 02 đối tượng có quan hệ 1-1 trên CSDL SQL Server 2005 sử dụng tập tin cấu hình

Hẹn gặp lại ở các chủ đề  tương tự liên quan việc cấu hình cũng mối quan hệ 1-1 trên SQL Server 2005 sử dụng annotation như EJB 3.0 và cho thấy sự ngắn gọn khi cấu hình thay thế tập tin xml

 

Không có nhận xét nào:

Đăng nhận xét