我正在開發Grails 2.3.7應用程序,我無法通過選擇框更改域屬性。每次我嘗試更改屬性並保存時,我都會得到一個HibernateException: identifier of an instance of Ethnicity was altered from X to Y
。我不想改變種族的身份,我只是想把種族從一個變成另一個種族。無法更改Grails中的域類屬性值
有幾件事情需要注意:我使用的是同一個控制器的動作來創建和更新的人
- 。
- 設置
personInstance.ethnicity
到null
權personInstance.properties = params
前將保存的工作,但我 不知道爲什麼,我不想爲每個協會 ,我想改變這一點。 - 我意識到域模型似乎很奇怪。這是一個傳統的數據庫,我無法改變。
這裏是我的領域類:
class ApplicationPerson implements Serializable {
Integer appId
Integer applicationSequenceNumber
String firstName
String lastName
Ethnicity ethnicity
static mapping = {
id composite: ['appId', 'applicationSequenceNumber'],
generator: 'assigned'
}
}
class Ethnicity {
String code
String description
static mapping = {
id name: 'code', generator: 'assigned'
}
}
這是我_form.gsp
更新Ethnicity
(我刪除了所有正在保存就好了其他屬性):
<div class="fieldcontain ${hasErrors(bean: personInstance,
field: 'ethnicity', 'error')} ">
<label for="ethnicity">Ethnicity</label>
<g:select id="ethnicity"
name="ethnicity.code"
from="${Ethnicity.list()}"
optionKey="code"
value="${personInstance?.ethnicity?.code}" />
</div>
最後一點,我的控制器動作表單POST:
def save() {
Application app = applicationService.getCurrentApplication()
// Find/Create and save Person
ApplicationPerson personInstance = app.person
if (!personInstance) {
personInstance =
new ApplicationPerson(appId: app.id,
applicationSequenceNumber: app.sequenceNumber)
}
personInstance.properties = params
if (!personInstance.validate()) {
respond personInstance.errors, view:'edit'
return
}
personInstance.save flush:true
redirect action: 'list'
}
組合鍵中的'aidm'是什麼? – dmahapatro
一個錯字。感謝您指出了這一點。 – grantmcconnaughey
你使用遷移腳本嗎?以及如何備份後自動創建數據庫...? – danielad