2011-02-03 32 views
5

EDIT: Cụ thể nói về truy vấn đối với không có bảng. Có, tôi có thể sử dụng tồn tại, nhưng tôi phải làmLàm thế nào để chọn nếu một hàng tồn tại trong HQL

select case when exists (blah) then 1 else 0 end as conditionTrue 
from ARealTableReturningMultipleRows 

Trong T-SQL tôi có thể làm:

select case when exists(blah) then 1 else 0 end as conditionTrue 

Trong Oracle tôi có thể làm:

select case when exists(blah) then 1 else 0 end as conditionTrue from DUAL 

Tôi có thể đạt được điều tương tự như thế nào trong HQL?

select count() có vẻ là lựa chọn thay thế thứ hai, nhưng tôi không muốn xử lý mọi hàng trong bảng nếu tôi không cần.

+0

hãy nhìn vào câu hỏi này: http://stackoverflow.com/questions/3672444/where-exists-in-hibernate-hql –

Trả lời

1

Câu trả lời ngắn: Tôi tin rằng KHÔNG THỂ.

lập luận của tôi:

Theo Where can I find a list of all HQL keywords? dự án Hibernate không công bố HQL ngữ pháp trên trang web của họ, nó có sẵn trong việc phân phối đầy đủ Hibernate như một tập tin .g ANTLR mặc dù.

Tôi không có nhiều kinh nghiệm với .g tập tin từ ANTLR, nhưng bạn có thể tìm thấy điều này trong file (hibernate-distribution-3.6.1.Final/project/core/src/main/antlr/hql.g):

selectFrom! 
     : (s:selectClause)? (f:fromClause)? {                          
       // If there was no FROM clause and this is a filter query, create a from clause. Otherwise, throw         
       // an exception because non-filter queries must have a FROM clause.                
       if (#f == null) {                             
         if (filter) {                            
           #f = #([FROM,"{filter-implied FROM}"]);                   
         }                               
         else                              
           throw new SemanticException("FROM expected (non-filter queries must contain a FROM clause)");      
       }                                 

trong đó nêu rõ có một số HQL truy vấn không có FROM khoản, nhưng đó là chấp nhận được nếu đó là một truy vấn lọc. Một lần nữa, tôi không phải là chuyên gia về HQL/Hibernate, nhưng tôi tin rằng truy vấn lọc không phải là truy vấn đầy đủ mà bạn xác định bằng cách sử dụng session.createFilter (xem How do I turn item ordering HQL into a filter query?), vì vậy tôi nghĩ không có cách nào để bỏ qua mệnh đề FROM.

+0

Đó là nghiên cứu tuyệt vời, cảm ơn rất nhiều! Tôi sẽ đánh dấu đây là câu trả lời được chấp nhận cho bây giờ, với hy vọng rằng một ngày nào đó câu trả lời của bạn sẽ không còn chính xác nữa. =) –

0

Theo http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-expressions có vẻ như chúng hỗ trợ cả trường hợp và câu lệnh tồn tại.

+0

biên tập lại các câu hỏi để phản ánh tốt hơn những gì tôi muốn nói. Xin lỗi đã làm bạn bối rối. –

+0

Ah, tôi thấy, trông rất giống với câu hỏi tôi đã hỏi từ lâu rồi mà không có câu trả lời. Nếu bạn nhận được một trong những công trình, có lẽ bạn sẽ xem xét việc thêm nó vào câu hỏi của tôi. http://stackoverflow.com/questions/808543/select-constant-in-hibernate – digitaljoel

1

Tôi đang sử dụng bảng giả với một hàng ví dụ MyDual.

select case when exists(blah) then 1 else 0 end as conditionTrue from MyDual 
Các vấn đề liên quan