2011-11-17 29 views
21

Tôi có nhiều mối quan hệ với hạt Java của mình. Khi tôi sử dụng List để xác định biến tôi như như:Hibernate Nhiều quan hệ Nhiều Thiết lập Hoặc Danh sách?

@Entity 
@Table(name="ScD") 
public class Group extends Nameable { 

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER) 
    @JoinColumn(name="b_fk") 
    private List<R> r; 
    //or 
    private Set<R> r; 

Tôi nhận được rằng lỗi:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' 
... 

Khi tôi sử dụng Set tất cả mọi thứ dường như làm việc tốt.

Tôi muốn hỏi rằng khi sử dụng nhiều mối quan hệ để sử dụng cho consept List hoặc Set (vì danh sách có thể trùng lặp và đặt nhưng hiệu suất và các vấn đề khác)?

Trả lời

52

Từ quan điểm cơ sở dữ liệu quan hệ, đây là tập hợp. Cơ sở dữ liệu không bảo quản trật tự và sử dụng List là vô nghĩa, thứ tự trong chúng không được chỉ định (trừ khi sử dụng cái gọi là bộ sưu tập được lập chỉ mục).

Sử dụng Set cũng có ý nghĩa hiệu suất tuyệt vời. Khi sử dụng List, Hibernate sử dụng bộ sưu tập PersistentBag bên dưới có một số đặc điểm khủng khiếp. Tức là: nếu bạn thêm một mối quan hệ mới, trước tiên nó sẽ xóa tất cả những cái hiện có và sau đó chèn chúng trở lại + cái mới của bạn. Với Set nó chỉ chèn bản ghi mới. Thứ ba

Điều thứ ba - bạn không thể có nhiều List trong một thực thể vì bạn sẽ nổi tiếng không thể cùng lúc tìm nạp nhiều túi ngoại lệ.

Xem thêm:

+0

Bên cạnh nhiều mối quan hệ (một, nhiều, nhiều, một-nhiều), tôi có nên sử dụng 'Đặt' thay vì' Danh sách' để có mẫu thiết kế tốt không? – kamaci

+0

Có, vì 'Danh sách' cho thấy các mục được sắp xếp không đúng. Tôi biết, tôi biết nó có API dễ dàng hơn một chút. –

+3

cả hai bỏ phiếu chấp nhận làm câu trả lời cho thông tin chi tiết và liên kết tốt. – kamaci

3

Làm thế nào về yêu cầu độc đáo từ Set? Điều này không có hiệu lực Hibernate để lấy tất cả các đối tượng mỗi khi một được thêm vào bộ sưu tập để đảm bảo một mới được thêm vào là duy nhất? Danh sách sẽ không có giới hạn này.

+1

Danh sách cũng có giới hạn này, vì hibernate cần phải quản lý thứ tự trong Danh sách, do đó, nó cũng phải truy xuất tất cả các mục –

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