2010-08-01 37 views
6

Tôi gặp vấn đề với Hibernate EntityManager 3.5.3-Final khi nói đến các biến vị ngữ phức hợp.JPA 2.0 Tiêu chí và nhóm các Dự báo

Ví dụ (không đoạn mã thực tế, nhưng ý tưởng phải rõ ràng):

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 
Predicate predicate1 = criteriaBuilder.conjunction(); 
Predicate predicate2 = criteriaBuilder.conjunction(); 
// These are Boolean expression with common Root 
predicate1.getExpressions().add(expression1); 
predicate1.getExpressions().add(expression2); 
predicate2.getExpressions().add(expression3); 
predicate2.getExpressions().add(expression4); 
//... 
query.where(criteriaBuilder.or(predicate1, predicate2)); 

Bây giờ, tôi mong chờ một cái gì đó như:

SELECT ... FROM ... WHERE (expression1 AND expression2) OR (expression3 AND expression4) 

Tuy nhiên tôi kết thúc với:

SELECT ... FROM ... WHERE expression1 AND expression2 OR expression3 AND expression4 

Tôi đang làm điều gì đó hết sức sai hoặc là vấn đề Hibernate?

Trả lời

6

Theo đặc tả SQL, cả hai câu lệnh đều có cùng ý nghĩa. Nó không quan trọng cho dù câu lệnh có chứa() hay không, vì vậy Hibernate không sử dụng chúng. Thứ tự ưu tiên là như thế này, tương tự như 1 + 2 * 3 giống như 1+ (2 * 3).

+0

Đó là một sự xấu hổ mà nhóm không rõ ràng hơn nhưng theo như kết quả cuối cùng là có liên quan của bạn tất nhiên là đúng. – jarekrozanski

+0

Bạn nói đúng, nhóm rõ ràng sẽ tốt hơn nhiều. –

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