2012-04-11 15 views
5

Tôi có một bảng Image giữ thông tin hình ảnh. Tôi cũng muốn lưu trữ hình ảnh. Vì vậy, nên tôiJPA: Tôi có nên lưu trữ BLOB trong cùng một bảng với tìm nạp Lười biếng hay tôi nên lưu trữ nó vào một bảng khác và tìm nạp một cách lười biếng mối quan hệ 1-1:

1.Store the Blob trong bảng cùng một hình ảnh và lấy nó lười biếng như sau

@Basic(optional = false, fetch = FetchType.LAZY) 
@Lob 
@Column(name = "IMAGE_BLOB", length=100000) //This will generate MEDIUMBLOB 
private byte[] imageBlob; 

Hoặc

2.Create một bảng khác ImageBlob với OneToOne mối quan hệ với Image, và tìm nạp mối quan hệ lười biếng

@OneToOne(cascade = CascadeType.ALL, mappedBy = "image", fetch=FetchType.LAZY) 
private ImageBlob imageBlob; 

Đây là những tw o kỹ thuật giống nhau về hiệu suất?

+0

Làm việc triển khai đầu tiên. Nó sẽ không ảnh hưởng nếu bạn đang tìm kiếm lười biếng. Bạn có thể viết một phương thức khác mà nó trả về dựa trên id duy nhất của hàng nếu BLOB cần được trả về. – Phani

+0

@Phani: Cảm ơn bạn. –

+0

Vui lòng chấp nhận hoặc đóng câu hỏi. – Phani

Trả lời

3

Cả hai kết quả sẽ có cùng hiệu suất, nhưng tôi khuyên bạn nên sử dụng hiệu ứng thứ hai cho các đốm màu lớn.

Cơ sở dữ liệu có thể khó xử với các đốm màu và tốt hơn là để chúng tách biệt với đối tượng riêng của chúng. Điều này sẽ cho phép bạn kiểm soát nhiều hơn các đốm màu.

+0

Cảm ơn bạn rất nhiều vì cái nhìn sâu sắc của bạn –

3

Theo như tôi biết, đầu tiên không hoạt động với Hibernate và EclipseLink là nhà cung cấp JPA. LAZY là một gợi ý cho các nhà cung cấp, những sẽ tải háo hức mà không báo cáo một lỗi hoặc cảnh báo.

Hiệp hội OneToOne sẽ chỉ lười nếu lớp dệt được bật, nếu không nó cũng sẽ không giúp ích gì.

Tôi đã thực hiện nó bằng cách sử dụng một bảng hoàn toàn riêng biệt được gọi là LazyBlob, với thuộc tính "entity" và "id", và đã viết một lớp tiện ích để lấy lob lazily từ bảng này.

+0

LAZY trên cơ bản không hoạt động với EclipseLink (sử dụng dệt). Nhưng một bảng riêng biệt thường tốt hơn cho các LOB lớn. – James

+0

@James LAZY thực hiện * loại công việc * với dệt Eclipselink. Ít nhất với Eclipselink 2.3.1, nó sẽ làm việc cho các truy vấn đơn giản, nhưng nếu bạn tham gia tìm nạp vào một bảng khác thì LOB sẽ được tải xuống háo hức. Tôi đã phải làm việc xung quanh giới hạn này trong một số ứng dụng. – gpeche

+0

Đó là lý do tại sao tôi sử dụng phương pháp trả lời. Miễn là LAZY là một gợi ý, bạn không bao giờ biết, khi nào nó sẽ ngừng hoạt động. Đó không phải là một vấn đề, nếu tập tin nhỏ, nhưng nó là, nếu nó là lớn và chỉ trong một số nhỏ các trường hợp cần thiết. – Oliv

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