2013-04-06 21 views

Trả lời

6

Có, có thể, với cách giải quyết dễ dàng. Tôi đã chỉ định các chú thích @AdditionalCriteria như thế này:

@AdditionalCriteria(":disableDeletedFeature = 1 or this.isDeleted = false") 

và chỉ định một giá trị tài sản mặc định cho lá cờ vô hiệu hóa trong persistence.xml:

<property name="disableDeletedFeature" value="0"/> 

nên bằng cách lọc mặc định được kích hoạt nhưng bạn có thể vô hiệu hóa nó dễ dàng ở cấp EntityManager như sau:

entityManager.setProperty("disableDeletedFeature", 1); 

Nó hoạt động tốt cho tôi, hy vọng điều đó sẽ hữu ích!

+1

Tôi xem nó như là một cách giải quyết chứ không phải là một giải pháp khuyến khích nhưng kể từ khi tôi đã thực hiện nó rất tương tự (sử dụng @AdditionalCriteria ("this.deleted =: SOFTDELETED")), tôi chấp nhận câu trả lời này. @ James, có một số nói về việc thực hiện hỗ trợ cấp bản địa cho nó trên wiki phát triển Eclipselink (http://wiki.eclipse.org/Talk:EclipseLink/Development/AdditionalCriteria). – Kalle

+1

Cảm ơn Kristof và Kalle. Cả hai giải pháp đều làm việc cho tôi trên PostgreSQL, nhưng: disableDeletedFeature = 1 không hoạt động cho các thử nghiệm đơn vị của chúng tôi với H2. Vì vậy, tôi đã sử dụng @AdditionalCriteria ("this.blocked =: disableDeletedFeature OR this.blocked = false") –

1

Nếu bạn sử dụng truy vấn SQL gốc, tiêu chí sẽ không được nối thêm.

Nếu không, không có cách dễ dàng để tắt tính năng này, trừ khi bạn tạo một đơn vị lưu giữ khác hoặc một lớp khác không có tiêu chí bổ sung.

Một điều bạn có thể làm là đặt điều kiện OR trong tiêu chí dựa trên thuộc tính phiên, sau đó khi bạn đặt thuộc tính này thành true, bạn có thể vô hiệu hóa tiêu chí.

Bạn có thể đăng nhập yêu cầu nâng cao để có tùy chọn được thêm vào để không thêm nó vào truy vấn.

0

Tôi sử dụng eclipselink 2.4.1. Nó chỉ làm việc với BÁO GIÁ MARK ứng với giá trị tài sản:

@AdditionalCriteria(":disableDeletedFeature = '1' or this.isDeleted = false") 

và ở đây:

entityManager.setProperty("disableDeletedFeature", '1'); 
Các vấn đề liên quan