2012-04-25 24 views
7

Tôi đang cố gắng để chuyển đổi lĩnh vực boolean sử dụng HQL sau:phủ nhận unary nhà điều hành trong Hibernate QL

update Entity e set e.booleanField = not e.booleanField where e.id = ?1; 

Thật không may "QuerySyntaxException: dấu hiệu bất ngờ: không gần ..." bị ném.

Câu hỏi của tôi là: có một số toán tử đơn nhất cho hibernate hỗ trợ biểu thức như vậy không? Hoặc bất kỳ thủ thuật nổi tiếng nào?

sql hỗ trợ truy vấn như vậy (postgresql):

update entity_table set booleanField = not(booleanField); 
+0

[Giả sử] (http://docs.jboss.org/hibernate/orm/3.3/ reference/en/html/queryhql.html # queryhql-expressions) HQL hỗ trợ 'not' trong các biểu thức, nhưng tôi không chắc liệu điều đó có áp dụng cho các biểu thức bên ngoài mệnh đề' where' hay không. Bạn có thể muốn thử một hack phổ biến 'set e.booleanField = 1 - e.booleanField' để giải quyết vấn đề này. – dasblinkenlight

+0

Xin lỗi, không hoạt động. "ERROR: toán tử không tồn tại: số nguyên - boolean" –

+3

Đây là một cách hack khác để diễn tả 'NOT':' đặt e.booleanField = (e.booleanField == false) '. – dasblinkenlight

Trả lời

1

tôi sẽ chỉ cần sử dụng một truy vấn SQL bản địa cho việc này.

2

Để chuyển đổi tài sản boolean, tương đương với các nhà điều hành unary not, dưới HQL/JPQL, sử dụng:

UPDATE entity e SET e.booleanField = (e.booleanField=false)