2008-12-23 27 views
5

Tôi đang cố gắng tạo một ứng dụng giữ mô hình đối tượng đồng bộ với cơ sở dữ liệu bằng cách quan sát tất cả các thay đổi và sau đó ngay lập tức kiên trì các đối tượng trong câu hỏi. Nhiều đối tượng trong mô hình có con trong danh sách hoặc cây lớn.Tùy chọn xếp tầng JPA khi chạy

Khi tôi tải một đối tượng từ cơ sở dữ liệu, tôi dựa vào mối quan hệ xếp tầng một chiều để truy xuất tất cả các con của nó và đưa chúng vào ứng dụng.

Tuy nhiên, có thể thay đổi trường trong đối tượng cha mẹ yêu cầu sự kiên trì và tôi có thể xác định rằng không có trẻ nào bị ảnh hưởng. Vì vậy, tôi muốn tồn tại cha mẹ, mà không cần nhấn cơ sở dữ liệu với tất cả các con cascaded vẫn tồn tại.

ví dụ

@Entity 
public class Parent { 

    @OneToMany(cascade=CascadeType.ALL) 
    public List children; 

} 

Làm thế nào tôi có thể ghi đè tùy chọn cascade khi tôi vẫn tồn tại một đối tượng phụ huynh? Hay tôi chỉ cần đặt nó vào REFRESH và chắc chắn rằng tôi không bao giờ cần một tầng vẫn tồn tại?

Trả lời

4

Đọc các đối tượng từ cơ sở dữ liệu và lưu giữ chúng dựa trên hai chú thích khác nhau.

Khi bạn tải một đối tượng, nó cũng sẽ nhận được đầu kia của bất kỳ mối quan hệ háo hức (FetchType.EAGER) nào, như được xác định bởi thuộc tính tìm nạp trên mối quan hệ.

Tùy thuộc vào nhà cung cấp JPA của bạn, bạn có thể có các tùy chọn để ghi đè hành vi này. EclipseLink, thông qua các cực kỳ hữu ích QueryHint.BATCH, chắc chắn không.

Khi bạn vẫn tồn tại, xóa hoặc làm mới, loại thác là những gì có liên quan.

Vì vậy, mất hàng rào, hãy tìm nạp và giải quyết sự cố.

Cá nhân tôi nghĩ rằng tất cả các tầng đều yêu cầu sự cố nhưng ý kiến ​​sẽ thay đổi.

Nhà cung cấp JPA phong nha sẽ có một lược đồ bộ nhớ đệm khá tinh vi (có thể cấu hình). Có lẽ bạn nên hỏi tại sao bạn đang tái phát minh ra bánh xe đặc biệt đó?

Đây có phải là vấn đề về cập nhật không đồng bộ hoàn toàn cho hiệu suất không? Hoặc là một cái gì đó khác là lý do?

+0

Đây là một ứng dụng độc lập với cơ sở dữ liệu trên cùng một máy hoặc máy chủ lân cận. Toàn bộ mô hình được yêu cầu để có trong bộ nhớ để người dùng có thể chơi với nó. Tôi đang cố gắng để có kết quả của tất cả các hành động của người dùng vẫn tồn tại để họ không bao giờ phải nhấp vào "lưu". – Cogsy

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