2013-03-07 42 views
2

我是Groovy和Grails的新手,但我對Hibernate非常熟悉。對於我正在處理的項目,我需要實施某些域類的軟刪除Hibernate Filters似乎是一個合適的解決方案,因爲它會允許我添加一個條件到我的域類,它會過濾掉軟刪除的記錄,而不需要我們手動爲每個查詢添加一個條件。幸運的是,Grails提供了一個Hibernate Filter plugin,它可以很容易地在Grails中使用Hibernate Filters。Grails Hibernate Filters插件似乎可以工作,但不會篩選結果

不幸的是,正如您可能已經猜到的那樣,我無法讓它正常工作。當調試一切似乎設置正確(過濾器被添加到實體,過濾器正在啓用會話等),但沒有被過濾的結果。

我已經設定,這樣的:

BuildConfig.groovy

grails.project.dependency.resolution = { 

    ... 

    plugins { 

     ... 

     compile ":hibernate-filter:0.3.2" 
    } 
} 

APP-Config.groovy中

import org.grails.plugin.hibernate.filter.HibernateFilterDomainConfiguration 

dataSource { 

    ... 

    configClass = HibernateFilterDomainConfiguration 
} 

MyDomainClass.groovy

class MyDomainClass extends MySuperClass { 

    ... 

    Boolean deleted = false 

    static hibernateFilters = { 
     deletedFilter(condition:"deleted=0", default:true) 
    } 

    ... 

} 

MyController.groovy

def list() { 

    ... 

    myDomainInstances = MyDomainClass.list() 
    [myDomainInstanceList: myDomainInstances, myDomainInstanceTotal: myDomainInstances.totalCount, ...] 
} 

使用上面的代碼總是給我篩選結果,即使一切似乎是正確配置。當調試應用程序啓動時,我看到插件被初始化,掃描我的域類並從中獲取hibernateFilters屬性。在此之後,它會正確創建Hibernate過濾器。當接收到請求時,我會看到Grails過濾器踢入,並且插件啓用當前Hibernate會話中的所有默認過濾器(我的是)。一切看起來都像我期望的那樣(我在Hibernate的日誌記錄中看到過濾器被啓用),除了結果(SQL日誌記錄支持我,在deleted中沒有添加WHERE子句)。

我跟着documentation頁面上的說明,還嘗試了以下內容:

我也試過以前版本插件,甚至嘗試使用插件功能(Foo.withHibernateFilters等)明確啓用過濾器。

我仍然卡住,所以:任何人都可以幫助我使用Grails Hibernate Filter插件獲得過濾結果嗎?

使用的軟件版本:

  • 的Grails 2.1.3
  • Grails的休眠2.1。3
  • 的Grails Hibernate的過濾器0.3.2
  • 的Java 1.7.0_11
+0

我已經添加了一個問題插件的問題跟蹤:HTTP://jira.grails .ORG /瀏覽/ GPHIBERNATEFILTER -9- – 2013-03-08 17:04:33

回答

1

的Grails 2.1.3使用Hibernate版本3.6.10。 Hibernate 3不支持子類上的過濾器(例如聯合子類,聯接子類)。在上面的例子中,在MySuperClass上添加過濾器將會起作用。 Hibernate 4.1.5.SP1和更新版本將支持子類上的過濾器。

MySuperClass.groovy

class MySuperClass { 

    ... 

    Boolean deleted = false 

    static hibernateFilters = { 
     deletedFilter(condition:"deleted=0", default:true) 
    } 

    ... 

} 

MyDomainClass.groovy

class MyDomainClass extends MySuperClass { 

    ... 

} 

不幸的是,上面沒有正確記錄在Hibernate documentation regarding filters

的更多信息: