2013-01-12 31 views
8

Tôi có yêu cầu tìm nạp các hàng đã chọn từ cơ sở dữ liệu Oracle dựa trên ids được cung cấp dưới dạng mảng, giống như truy vấn SELECT ... FROM table_name WHERE id IN().Làm thế nào để sử dụng phương thức setParameterList() trong Hibernate?

Trong nỗ lực của tôi để làm như vậy, tôi đang cố gắng sử dụng phương pháp org.hibernate.setParameterList(String name, Object[] values) trong DAO của tôi như sau.

@Service 
@Transactional(readOnly = true, propagation=Propagation.REQUIRES_NEW) 
public final class ProductImageDAO implements ProductImageService { 

    @SuppressWarnings("unchecked") 
    public List<Object[]> getFileName(String[] list) { 
     return sessionFactory 
       .getCurrentSession() 
       .createQuery("SELECT prodImageId, prodImage FROM ProductImage WHERE prodImageId=:list") 
       .setParameterList("list", list).list(); 
    } 
} 

Tham số loại String[] trong phương thức đã cho được cung cấp từ lớp bộ điều khiển Spring tương ứng.

Điều này khiến cho ngoại lệ sau được ném.

org.hibernate.hql.ast.QuerySyntaxException: dấu hiệu bất ngờ:, gần dòng 1, cột 78 [chọn prodImageId, prodImage từ model.ProductImage nơi prodImageId =: id0_,: id1_,: id2_,: id3_, : id4_,: id5_]

cách để lấy hàng được lựa chọn dựa trên danh sách các ids sử dụng Hibernate là gì?

Trả lời

20
String queryString = "select acc from cgix.trust.domain.PtbnAccount as acc where acc.accountId IN (:accountdIds)"; 
Query query = session.createQuery (queryString); 
query.setParameterList("accountIds", accountFilter); 

Giả sử accountFilter là đối tượng List. Hãy nhớ rằng bạn không nên chuyển danh sách trống vì điều đó sẽ dẫn đến SQL sau (sẽ không hoạt động): ... WHERE xyz IN() ... (lưu ý mệnh đề trống).

+0

Có cú pháp HQL của tôi đã sai . Thay thế 'where prodImageId =: id' bằng' where prodImageId in (: id) 'hoạt động. – Tiny

+6

Truy vấn cuối cùng phải là 'query.setParameterList (" accountIds ", accountFilter);', no? –

+0

Fukuzawa là đúng, nên query.setParameterList ("accountIds", accountFilter), vui lòng cập nhật câu trả lời – UCJava

3

Vấn đề mà hầu hết mọi người thực hiện ở đây là họ vẫn muốn sử dụng,

query.setParameter("accountIds", accountFilter); 

thay vì

query.setParameterList("accountIds", accountFilter); 

sử dụng setParameterList() khi giao dịch với danh sách

+0

cách đặt chuỗi [] mảng làm tham số truy vấn – priyadarshini

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