2015-01-21 47 views
3

我成功地爲我的應用程序的實體實施了軟刪除(又名刪除標誌)。但是,我還有一個問題。 我已經用findAll和count方法編寫了一個自定義的JPARepository,用於過濾掉已刪除的方法。我這樣做與規格:JPA規範:篩選子實體

softDeleteSpecification = new Specification<T>() { 
     @Override 
     public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { 
      return cb.or(cb.isNull(root.get(DELETED_FIELD_NAME)), cb.equal(root.<T>get(DELETED_FIELD_NAME), false)); 
     } 
    }; 

如果實體有例如,它們也軟刪除實體的一對多子列表,沒有被過濾此列表,因爲查詢不被其運行的倉庫。

我的問題:我可以修改上面的規範,以便軟刪除的孩子被過濾掉嗎? 另一種方法是使用反射篩選孩子(在查詢後手動篩選),但那不會是高性能的。

回答

0

使用Hibernate,您可以在實體

@Entity 
@Where(clause = "deleted = 0") 
public class MyEntity { 
... 

也就是說使用@Where註解,看看@SQLDelete用於替代你的實現軟刪除的。

+0

我們已經嘗試過。額外的where子句被添加到在實體本身上執行的查詢中,查詢在父類中通過預先獲取執行,而不是使用延遲獲取的查詢。 附註:我們試圖避免Hybernate特定的命令,因爲我們不需要任何直接的依賴關係。這就是爲什麼我建立了一個定製的軟刪除解決方案,而不是使用where子句。 雖然where子句是個好主意。 – 2015-01-21 12:24:37