2012-06-18 33 views
2

我們必須連接到其中每一個表有一個稱爲deleted列這表明如果實體已被刪除或不遺留數據庫Grails應用程序(這意味着數據實際上從未得到從表中刪除,它在一段時間後被歸檔)。對於每一個我們的域對象的,我們想增加一個自動where條款,看起來像:的Grails - 添加where子句所有的域對象

where deleted = false 

,使我們不必明確的內容添加到應用程序中的每個查詢。有沒有辦法在Grails中實現這一點?

+0

嗨,看看[這個問題](http://stackoverflow.com/questions/6082524/is-it-possible-to-metaprogram-named-queries-onto-a-grails-domain-class)也許它可以幫助你。 –

回答

1

我不認爲GORM直接支持這一點。但是,您可以利用hibernate攔截器並自行添加它。特別是,你可以使用onPrepareStatement鉤where子句添加到冬眠生成每個查詢。例如:

// src/groovy/mypackage/MyEntityInterceptor.groovy 
package mypackage 
class MyEntityInterceptor extends org.hibernate.EmptyInterceptor { 
    String onPrepareStatement(String sql) { 
     return addNotDeletedClause(sql) 
    } 
} 
// grails-app/conf/spring/resources.groovy 
beans = { 
    entityInterceptor(MyEntityInterceptor) 
} 

不幸的是,你必須解析傳入SQL語句來找出其中插入where條款。