我是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頁面上的說明,還嘗試了以下內容:
- https://stackoverflow.com/a/6143422/236092
- http://www.intelligrape.com/blog/2010/07/13/grails-hibernate-filter-plugin-a-life-saver/
- https://stackoverflow.com/a/12467408/236092
我也試過以前版本插件,甚至嘗試使用插件功能(Foo.withHibernateFilters
等)明確啓用過濾器。
我仍然卡住,所以:任何人都可以幫助我使用Grails Hibernate Filter插件獲得過濾結果嗎?
使用的軟件版本:
- 的Grails 2.1.3
- Grails的休眠2.1。3
- 的Grails Hibernate的過濾器0.3.2
- 的Java 1.7.0_11
我已經添加了一個問題插件的問題跟蹤:HTTP://jira.grails .ORG /瀏覽/ GPHIBERNATEFILTER -9- – 2013-03-08 17:04:33