我想知道是否可以更改的主鍵值 Grails Domain類中的組合主鍵的值?例如,具有本領域:更新Grails的主鍵值gorm
class StudentHistory implements Serializable {
String studentNumber
String schoolYear
Integer yearLevel
String section
Float average
String status
static mapping = {
...
id composite: ["studentNumber", "schoolYear", "yearLevel", "section"]
...
}
}
令說,在schoolYear: "2014-2015"
,一定yearLevel: 1
學生從section: "1D"
到section: "1N"
studentNumber: "2011-488-MN-0"
轉移部分。現在執行該記錄更新,我們做了service
內類似的東西:
StudentHistory record = StudentHistory.find {
eq("studentNumber", "2014-488-MN-0")
eq("schoolYear", "2014-2015")
eq("yearLevel", 1)
eq("section", "1D")
}
record.setSection("1N")
record.save(flush: true, insert: false)
的問題是,在主鍵更新不生效,但是當我試圖更新其他非主要領域如average
和status
,更新它們可以正常工作(我試着直接在數據庫上執行SQL
來確認)。我如何更新主鍵?
PS:現在,在此基礎上設計的,我知道有些人會認爲,爲什麼不只是創造另一個紀錄,然後就去拿已進入最後的記錄?但我需要做的是更新該複合主鍵。
PPS:請不要建議上刪除舊的實例,並創建一個新的,複製除了section
舊的細節。我不能這樣做,因爲許多表都連接到這張表。
請您詳細說明:「主鍵更新不生效」。你如何確認它沒有生效?而且,你能否也請說上面的代碼是否在服務或控制器中。謝謝。 :) –
@IStevenson我已經在主要和非主要字段中執行了更新(在服務內部),檢查數據庫是否有效。與更新非主字段相比,更新grails上的主字段不起作用。 – Gideon