2012-02-07 45 views
19

Tôi hiện đang chơi với ORMlite để tạo mô hình với các bảng và mối quan hệ. Một mối quan hệ là mối quan hệ nhiều-nhiều. Cách tốt nhất để thực hiện điều đó là gì?Cách tốt nhất để thực hiện các mối quan hệ nhiều - nhiều bằng cách sử dụng ORMLite là gì?

Để được cụ thể hơn:

Hãy nói rằng tôi đã có hai bảng này

Product 
    id 
    brand 

Purchase 
    id 

Một lần mua có thể có một số sản phẩm và một sản phẩm có thể trong một số mua hàng. Sử dụng ORMLite Tôi có thể có một @ForeignCollectionField trong mỗi mô hình nhưng tôi không nghĩ rằng nó sẽ làm việc. Giải pháp hợp lệ duy nhất tôi thấy là tạo ra một bảng thứ ba Product_Purchase để liên kết Sản phẩm và Mua hàng với các mối quan hệ nhiều-một.

Bạn nghĩ gì?

Trả lời

27

@ Câu trả lời tự của Romain là chính xác nhưng dưới đây là một số thông tin khác cho hậu thế. Như ông đề cập đến đó là một ví dụ nhiều-nhiều ORMLite dự án thể hiện cách tốt nhất để làm điều này:

http://ormlite.com/docs/example-many

Ví dụ sử dụng một bảng tham gia với id của cả hai đối tượng để lưu trữ một mối quan hệ. Trong câu hỏi @ Romain, đối tượng nối sẽ có cả hai đối tượng Product và đối tượng Purchase. Một cái gì đó như:

public class ProductPurchase { 
    @DatabaseField(generatedId = true) 
    private int id; 
    @DatabaseField(foreign = true) 
    private Product product; 
    @DatabaseField(foreign = true) 
    private Purchase purchase; 
    ... 
} 

Các trường id được chiết xuất từ ​​các đối tượng mà tạo ra một bảng như:

CREATE TABLE `userpost` (`id` INTEGER AUTO_INCREMENT , `user_id` INTEGER , 
    `post_id` INTEGER , PRIMARY KEY (`id`)) 

Sau đó bạn sử dụng các truy vấn bên trong để tìm ra Product đối tượng liên quan đến mỗi Purchase và ngược lại. Xem phương pháp lookupPostsForUser() trong dự án ví dụ để biết chi tiết.

Đã có một số suy nghĩ và thiết kế hoạt động xung quanh thực hiện điều này tự động nhưng ngay bây giờ ORMLite chỉ xử lý các mối quan hệ một-nhiều trong nội bộ.

+0

Ok cảm ơn nhiều Grey! Tôi chỉ muốn chắc chắn và bạn đã giải thích rõ. –

+1

Cảm ơn quá cho câu trả lời nhưng Gray, thực tế này là thực sự kém tài liệu .. Không tốt cho các ứng dụng Android lớn mà muốn sử dụng ORMLite .. – eento

+0

Bạn có thể cụ thể hơn @eento không? Bạn có thể viết một số tài liệu tốt hơn không? – Gray

6

Ok tôi đoán cách duy nhất để thực hiện là tạo bảng Product_Purchase thứ ba. Nó được chỉ định trong một sample project.

-1

Bạn phải tạo một lớp ProductPurchase và quản lý nó như thể nó là một đối tượng khác phải đi vào cơ sở dữ liệu của bạn.

Bạn có thể (nhưng bạn không phải) có Bộ sưu tập Sản phẩm bên trong Giao dịch mua (và ngược lại) nhưng chúng sẽ phải được cập nhật/tạo theo cách thủ công khi bạn tải mối quan hệ giữa Sản phẩm và Giao dịch mua từ ProductPurchase bảng liên kết. Có những bộ sưu tập đó không có nghĩa gì cho ORM (bạn sẽ không và không nên chú thích chúng).

Nếu bất cứ ai đang tìm kiếm và Android App với Nhiều-to-Nhiều mối quan hệ tôi đã làm việc trên một ví dụ: https://github.com/arthurrauter/ormlite-android

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