2011-09-16 25 views
8

Đây là trong DAO tôi:Chọn mục duy nhất từ ​​cơ sở dữ liệu với Spring Hibernate sessionfactory

public List<Weather> getCurrentWeather() { 
    return sessionFactory.getCurrentSession().createQuery("from Weather").list(); 
} 

này được tất cả các yếu tố từ bảng Thời tiết. Nhưng cho phép nói rằng tôi muốn làm một cái gì đó như thế này (tôi muốn chỉ có một phần tử từ bảng thời tiết):

public Weather getCurrentWeather() {  
    return sessionFactory.getCurrentSession().createQuery("from Weather where id = 1").list(); // here should be something else than list() 
} 

Tôi biết không nên cólist()cuối cùng, nhưng những gì tôi phải viết ở đó, để có được chỉ một đối tượng?

Trả lời

11

Nếu bạn có một id, bạn chỉ cần sử dụng nhận được:

public Weather getCurrentWeather() {  
    return sessionFactory.getCurrentSession().get(Weather.class, 1); 
} 

Nếu bạn cần phải làm một truy vấn, yeah bạn sẽ phải lấy phía trên cùng của tập kết quả, hoặc bạn có thể sử dụng uniqueResult() trên truy vấn.

+1

UniqueResult() là một đối tượng, làm thế nào bạn sẽ xử lý sự khác biệt của thời tiết và đối tượng bình thường không? Tôi có nên ném nó vào thời tiết không? Hoặc có một cách phù hợp hơn? – Jaanus

+2

Có, bạn bỏ nó. Không có những thứ như an toàn kiểu thời gian biên dịch với các truy vấn. Làm thế nào là trình biên dịch phải biết những gì tuyên bố HQL của bạn sẽ tạo ra cuối cùng? – Affe

+0

Nhưng điều này làm việc khi tôi có một cái gì đó khác hơn ID, ví dụ một số trường số nguyên? – Jaanus

7

Có điều gì sai khi nhận danh sách không? :) Ngay cả khi bạn biết chỉ có 1 hibernate không thể giả định điều đó. Bắt một danh sách là an toàn hơn anyway!

public Weather getCurrentWeather() {  
    List<Weather> list = sessionFactory.getCurrentSession().createQuery("from Weather where id = 1").list(); // here should be something else than list() 
    return (list.isEmpty() ? null : list.get(0)); 
} 
+0

Vâng tôi đã nghĩ đến việc có được danh sách, nhưng tôi nghĩ liệu có cũng là một cách khác. Tuy nhiên, tôi có nên xử lý sự thay đổi từ Danh sách thành Thời tiết trong DAO như bạn đã làm hay chỉ xử lý nó theo quan điểm của tôi, bằng cách lấy phần tử đầu tiên của danh sách ở đó? Mà sẽ được sử dụng thích hợp? – Jaanus

+0

Vâng nó thực sự tùy thuộc vào bạn, nhưng trừ khi bạn muốn danh sách được trả lại cho bạn xem tất cả các thời gian, tôi sẽ làm điều đó ở cấp độ DAO. Ngoài ra, tên phương thức cho thấy bạn chỉ muốn thời tiết hiện tại để những người khác sau này sử dụng mã của bạn có thể bị nhầm lẫn là lý do tại sao một danh sách được trả về –

0

Bạn cần phải sử dụng các API Tiêu chuẩn như sau:

List<LeaveManagement> leaveManagements =  session.createCriteria(LeaveManagement.class) 
      .add(Restrictions.isNull("approvedTimeStamp")) 
      .list(); 

    If you want to write a hql query you can write as: 

    String hql = "from LeaveManagement where approvedTimeStamp is null"; 
     Query query = session.createQuery(hql); 
     List results = query.list(); 
Các vấn đề liên quan