Cách lấy dữ liệu từ các thuộc tính bảng khác nhau để hiển thị ra view đồng thời

Em chào anh (chị),
Anh(chị) cho em hỏi là mình có bảng A(id, nameA), có quan hệ 1-n với bảng B(id, nameB, id_A).
Bây giờ mình muốn lấy đồng thời các thuộc tính dữ liệu của 2 bảng A và B là (id_A, nameA,nameB) để hiển thị ra view đồng thời thì mình làm thế nào ạ?
Theo bình thường em làm thì sẽ tạo ra 1 thàng model trung gian C chứa các thuộc tính của bảng A và B. Sau đó sẽ join 2 bảng và đổ dữ liệu vào và hiển thị ra view ạ.
(hoặc cách khác là sẽ sử dụng haspMap (nhưng em ko rõ hiển thị ra view(jsp) kiểu gì ạ?
Có anh chị nào có cách làm nào khác và nhanh hơn không ạ?

1 Like

Tạo model trung gian cũng được, nhưng cách này khó reuse lại model/class.
Tốt nhất là taọ theo Composition:

class A{
      String x;
      String y;

}

class B {
    A a;
   String z;...

}

Như vậy chỉ cần đổ dữ liệu và class B là được, cách này nó thể hiện đúng mối quan hệ table luôn

4 Likes

Vâng, anh có thể nói rõ hơn cho em được không ạ. Khi này mình select dữ liệu join giữa 2 bảng, để đổ về Model B kiểu gì ạ?
Em thấy xây dựng như này giống kiểu tạo quan hệ relationship trong hibernate. Nhưng em chưa biết cách lấy dữ liệu ra kiểu gì ạ?
(Ở trong ruby thì em thấy có kiểu là B là con của A, thì B.A.y sẽ lấy được giá trị y (của A) . Không biết trong JAVA thì nó có lấy được như vậy không và bằng cách nào ạ?

Anh có thể cho em xin 1 ví dụ hoặc key words về vấn đề này để em có thể tìm hiểu thêm ko ạ =))

Nếu dùng hibernate (JPA) để lấy thì thông qua anotation sắn có, dùng “onetoMany” em xem ví dụ dưới
http://www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/
Còn nếu dùng JDBC thì viết câu query binh thường, rồi xử lý trên Java để đổ dữ liệu về model:
ref: http://www.mkyong.com/tutorials/jdbc-tutorials/
Còn link bên dưới là wrap up về oop, không biết đã học oop chưa?
http://www3.ntu.edu.sg/home/ehchua/programming/java/J3b_OOPInheritancePolymorphism.html

2 Likes

Trong hibernate, thì config quan hệ mà
Ví dụ trong table A với table B quan hệ với nhau, thì chỉ cần ánh xạ trên hibernate cũng thế, thành ra khi gọi lớp A thì toàn bộ thông tin của lớp B liên quan đến nó đều có hết rồi
Cứ vậy mà sài thôi

1 Like

Vâng đúng rồi anh, đây chính là cái chủ đích mà em đang và muốn hướng tới. ( vì thấy bên Ruby họ dùng như ạnh nói vậy)
Em đã làm thử nhiều ví dụ dùng hibernate config xml các quan hệ.
Vấn đề xảy ra là khi em select 1 đối tượng cha A, trong A đã Set chứa tập hơp con B. và đã config quan hệ đầy đủ trong hiberante. Nhưng khi em lấy select ra dữ liệu đối tượng A rồi. sau đó muốn lấy tiếp các tập hợp con B thì nó lại Null không lấy được.

(1) Em thấy ví dụ này họ chỉ đưa cho mình các config với lưu dữ liệu vào database, chứ không thấy có việc lấy dữ liệu ra anh ạ.
(2) Hình như hồi trước em dùng viết query, kết quả trả về 1 mảng result sau đó mình lại nạp vào từng model riêng để dùng thì phải.
(3) Kiến thức OOP của em thực sự cũng không tốt lắm. Anh có thể cho em hỏi thêm chút là cái quan hệ giữa các bảng 1- n nó có phải là quan hệ kế thừa cha con hay là không ạ?

Là dùng jdbc đó.

Không, nó là cha con khi nó chung đặt tính và khác về đặc điểm nhận dạng.

em dùng Annotation @NamedQuery
ref: http://www.journaldev.com/3451/hibernate-named-query-example-namedquery

2 Likes

Tại Hibernate nó sử dụng Lazy Fetch Type
Xem thêm ở đây nè em http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/

1 Like

Anh ơi cho em hỏi 1 chút là.
Từ bảng A(id,nameA) 1-n với B(id,nameB, id_A).
Trong hibernate em đã config được theo kiểu lấy 1 bản ghi A ra, thì có thể lấy tiếp ra 1 list B.
Vậy giờ em chỉ đơn thuần lấy ra 1 bản ghi B, thì có thể lấy ngược lên bản ghi A ko ạ?
Ko hiểu sao em lấy nên nó toàn ra null?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?