一個Grails 2.3.4
應用程序連接到Oracle數據庫使用以下域類:Grails何時將一個ID分配給一個對象?
class Person {
String name
static mapping = {
id column: "PERSON_ID", generator: "sequence", params: [sequence: 'person_seq']
}
}
的PersonController
使得在PersonService
方法的調用,它使以UtilService
的呼叫。在UtilService
該方法被稱爲具有基於閹此Person
對象是新的一些邏輯:
if (personInstance.id == null) { ... }
我已經發現的是,的personInstance
的id
屬性(其通過上述的方法調用傳遞)被分配時調用UtilService
。
調用PersonService
的控制器操作是@Transactional
,並且服務沒有任何事務配置。
所以,幾個問題:
- 當
id
值由GORM分配(我猜的插入,但看上去是錯的)? - 有沒有更好的方法來檢查對象是否是新的(
isAttached()
返回true
這樣對我不好)?
編輯:save()
尚未呼籲personInstance
時UtilService
做的id
檢查。
我不是你的問題是什麼完全清楚:你期待的ID仍在調用'save()'後爲空或即使在保存後ID仍爲空?否則在你的情況下(使用序列發生器)我會說,只要你的保存被刷新,這個ID就會被填充 - 如果你想急於你可以調用'save(flush:true)'。 – 2014-12-05 06:44:46
否則,也許是由於糟糕的經驗,但我不會依賴GORM內部來查看某個對象是否剛剛被保存。你可以在'save()'後面設置的域類上使用'transient Boolean newlyInserted'屬性,將實例包裝成一個POGO或命令對象(它將包含一個'newInstance'屬性),或者只需要一個您的服務方法的額外參數。 – 2014-12-05 06:48:32
@GregorPetrin,'id'在我調用'save()'之前有一個值,因此我的困惑。 – zoran119 2014-12-06 10:01:46