2014-11-01 28 views
5

Tôi đã từng sử dụng Hibernate và bây giờ tôi đang cố gắng hiểu JDBC. Tôi đã thực hiện rất nhiều nghiên cứu về Spring JDBC nhưng tôi vẫn không thể hiểu cách tạo mối quan hệ giữa các đối tượng.Ánh xạ đối tượng trong Spring JDBC?

Giả sử tôi có một sản phẩm:

public class Product { 
private Long id; 
private String nam; 
private Customer customer; 

//constructor, getters and setters. 
} 

và một khách hàng:

public class Customer { 
private Long id; 
private String name; 
private List<Product> products = new ArrayList<Product>(); 

//constructor, getters and setters 
} 

Mối quan hệ giữa khách hàng và sản phẩm là @OneToMany. Làm cách nào để lưu đúng đối tượng sản phẩm và khách hàng trong db bằng SpringJDBC? Cảm ơn bạn

+0

Bạn không. Bạn sử dụng khung công tác JPA. Giống như Hibernate. –

+0

Có cách nào để thực hiện việc này bằng Spring JDBC không? – Bravo

+0

Có cách nào để băng qua Đại Tây Dương trong xe hơi không? Vâng, chắc chắn - đã xây dựng một chiếc thuyền và đặt chiếc xe lên đó. Hoặc bạn chỉ có thể sử dụng một chiếc thuyền. –

Trả lời

4

Có rất nhiều ý nghĩa trong một vài trường hợp không sử dụng ORM toàn diện nhưng dựa vào mức trừu tượng thấp hơn, như Spring JDBCTemplate và RowMapper. iBatis cũng nghĩ đến điều đó. Và điều đó có ý nghĩa ngay cả trong các giải pháp doanh nghiệp lớn.

Nếu bạn rời khỏi thế giới ORM toàn diện, bạn sẽ phải tự mình làm thêm. Ví dụ, bạn có thể viết một truy vấn SQL với một phép nối, trả về tất cả các trường khách hàng và tất cả các sản phẩm của khách hàng đó, và lặp qua nó để ánh xạ tất cả các đối tượng đó đến đối tượng Java. Trong một vài trường hợp, mã có thể sạch như những gì bạn có với ORM.

Viết tất cả dữ liệu đó lộn xộn hơn, đặc biệt nếu bạn cần tối ưu hóa cho những thứ không bị bẩn.

Trường hợp sử dụng tốt nhất mà tôi có thể nghĩ là xử lý theo lô, kiểm soát truy cập dữ liệu trở nên quan trọng hơn và mức trừu tượng cao hơn không nhất thiết làm cho bạn hiệu quả hơn.

0

Nếu tôi hiểu chính xác câu hỏi của bạn, nếu nghĩ rằng nếu bạn không sử dụng ORM, bạn sẽ phải thực hiện việc này theo cách thủ công. Trong lớp DAO của bạn cho Khách hàng, trước tiên nó sẽ phải tồn tại tất cả các sản phẩm.

Một giải pháp thay thế có thể là tạo Thủ tục lưu trữ trên cơ sở dữ liệu và có sắp xếp sự kiên trì chính xác.
Điều này có thể được xử lý rất độc đáo bởi Spring JDBC, nhược điểm là bạn biết phải quản lý Java và lưu trữ các thủ tục. Trong trường hợp của bạn, nó vẫn có thể là hai thủ tục lưu trữ.

Cũng có khả năng QueryDSL và Jooq, nghĩ rằng tôi chưa có cơ hội để có cái nhìn tốt về chúng.

Cá nhân tôi thích giải pháp Thủ tục được lưu trữ, đối với tôi phần bổ sung trên đầu có giá trị, tôi biết những người khác không đồng ý, nhưng tôi không thích/mua giao dịch ORM.

+0

Không có lý do gì bạn không thể sử dụng [thủ tục lưu trữ với ORM] (http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Stored_Procedures). –

+0

Cảm ơn Boris, tôi không chắc chắn tôi biết rằng, tôi sẽ có một đọc nó có thể có ích :) – Gavin

1

Nếu bạn sẵn sàng cân nhắc điều gì khác ngoài mùa xuân hoặc ngủ đông, sormula có thể làm những gì bạn mô tả. Xem ví dụ one to many. Nếu bạn đặt tên khóa ngoài ở phía nhiều giống như khóa chính ở một bên, thì bạn không cần bất kỳ chú thích nào.

Để lưu trữ tham chiếu đến đối tượng một bên (Khách hàng) trong đối tượng nhiều bên (Sản phẩm), bạn có thể sử dụng OneToManyCascade#foreignKeyReferenceField. Ví dụ, tìm kiếm các bài kiểm tra trong dự án cho "foreignKeyReferenceField".

Các vấn đề liên quan