2012-05-12 42 views
13

Tôi đang làm việc trên hibernate trong nhật thực. Tôi đang thực hiện truy vấn 'Từ' đơn giản. Đây là mã sốTruy vấn Hibernate cho cùng một bản ghi nhiều lần

List list = sess1.createQuery("From Myview").list(); 
    System.out.println("Records Found :"+list.size()); 

    Iterator<Myview> i = list.iterator(); 

    while(i.hasNext()) 
    { 
     Myview nS = i.next(); 
     System.out.println(nS.getFirstName()+" -- "+nS.getLastName()+" -- "+nS.getAddressLine1()); 
    } 

Vấn đề là list.size() trả về 11, đúng như tôi có 11 bản ghi trong bảng. Nhưng khi tôi ở trong vòng lặp while, các bản ghi giống nhau được hiển thị nhiều lần và vòng lặp sẽ kéo dài sau lần lặp thứ 11. đây là đầu ra của tôi

enter image description here

ở đây là những gì tôi muốn

enter image description here

Bây giờ bạn có thể thấy rằng sản lượng của tôi, kỷ lục được hiển thị 11 lần nhưng kỷ lục tương tự được lặp đi lặp lại một lần nữa và một lần nữa . Và những gì tôi cần là đầu ra được hiển thị trong hình ảnh sau.

Vui lòng giúp tôi về vấn đề này, vì tôi mới sử dụng hình ảnh ngủ đông

Trả lời

18

Điều này xảy ra khi phần tử id trong tệp hbm của bạn không phải là PK trong bảng DB của bạn. Hibernate xử lý tất cả các hàng có cùng ID với cùng một đối tượng.

Hoặc thay đổi phần tử id của bạn để trỏ đến cột PK hoặc sử dụng phần tử tổng hợp-id trong trường hợp bảng của bạn chỉ có khóa chính kết hợp.

0

Bạn có chắc chắn rằng bảng được điền chính xác không? thử:

List list = sess1.createQuery("SELECT * FROM Myview").list(); 

hơn nữa, bạn có nhận được danh sách này từ chế độ xem không? bạn có chắc chắn rằng bạn đã thực hiện chế độ xem này chính xác không?

+3

Đây là SQL chứ không phải HQL. –

0

Bạn nên sử dụng từ khóa riêng biệt để lọc cùng một kết quả.

1

thực thể của bạn MyView phải thực hiện giao diện java.io.Serializable

0

Nếu bạn có hiệp hội trong việc lập bản đồ sau đó kiểm tra nếu fetch=FetchType.EAGER. Nếu có thì hãy sử dụng loại tìm nạp khác hoặc fetchMode.

0

Đặt các đối tượng được Hibernate trả về thành LinkedHashSet và trả về LinkedHashSet.

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