我想使用Grails功能在有限的基礎上創建/更新數據庫表。具體來說,我希望Grails管理一些表格,但不是全部。grails限制表創建
有沒有辦法限制Grails管理的表格,還是一個全有或全無的命題?
我想使用Grails功能在有限的基礎上創建/更新數據庫表。具體來說,我希望Grails管理一些表格,但不是全部。grails限制表創建
有沒有辦法限制Grails管理的表格,還是一個全有或全無的命題?
一般來說,這完全沒有關係,因爲Grails使用Hibernate的HBM2DDL功能。但是您可以使用自定義配置子類來攔截進程。下面是擴展GrailsAnnotationConfiguration,並覆蓋所有三個SQL生成方法的一個例子:
你並不需要覆蓋所有三個,例如你可以讓創建通過但刪除更新。
這被註冊的grails-app/conf目錄/ DataSource.groovy中:
dataSource {
pooled = true
driverClassName = ...
username = ...
password = ...
configClass = com.yourcompany.yourapp.MyConfiguration
}
注意的是,類必須用Java編寫的,因爲在基類的私有方法與方法衝突的問題是Groovy增加了所有常規類。
感謝修復史蒂夫。我重新發布上面的修復程序,但格式化爲stackoverflow。當我第一次嘗試這個時,我錯過了原來的if (
!command.toLowerCase()...)
在修復中反轉邏輯爲if (command.toLowerCase()...)
,這有效地使得它在我的config/DataSource.groovy中看起來像dbCreate = "create-drop"
沒有任何效果。我甚至從HTML源代碼工作從該頁面看到代碼的預期換行,但還是錯過了:-(一旦我得到這個正確輸入邏輯的重要一點是偉大的工作。
private String[] prune(String[] script) {
List<String> pruned = new ArrayList<String>();
for (String command : script) {
boolean ignore = false;
for (String ignoreName : IGNORE_NAMES) {
if (command.toLowerCase().contains(" table " + ignoreName.toLowerCase() + " ")) {
ignore = true;
break;
}
}
if (!ignore) {
pruned.add(command);
}
}
return pruned.toArray(new String[pruned.size()]);
}
真棒肯!謝謝! – ptsw 2011-05-19 13:39:15
工作就像一個魅力!感謝伯特 – ptsw 2010-10-15 14:14:29
有一個小的邏輯錯誤以下是修復 – ptsw 2010-10-15 16:31:15
私有String []西梅(字符串[]腳本){ 名單修剪=新的ArrayList (); 爲(字符串命令:腳本)。{ boolean ignore = false; for(String ignoreName:IGNORE_NAMES){ if(command.toLowerCase().con tains(「table」+ ignoreName.toLowerCase()+「」)){ ignore = true; 休息; } } if(!ignore)pruned.add(command); } } return pruned.toArray(new String [pruned.size()]); } –
ptsw
2010-10-15 16:31:40