나는 두 개의 도메인 클래스의 여러 관계에 undirectional 하나 있습니다Grails GORM : 일대 다 관계에있는 아이의 속성을 'null'하는 법?
package net.peddn
class User {
static hasMany = [texts: Text]
String username
}
및
package net.peddn
class Text {
long creator
String title
static constraints = {
creator(nullable: true)
}
}
내 사용자 컨트롤러는 다음과 같습니다
이package net.peddn
class UserController {
static scaffold = true
def delete() {
def userInstance = User.get(params.id)
userInstance.texts.each { text ->
text.creator = null
}
userInstance.delete(flush: true)
}
내 BootStrap.groovy의 모습 이 :
import net.peddn.Text
import net.peddn.User
class BootStrap {
def init = { servletContext ->
User user = new User(username: "username")
user.save(flush: true)
Text text1 = new Text(title: "titel 1", creator: user.id)
Text text2 = new Text(title: "titel 2", creator: user.id)
user.addToTexts(text1)
user.addToTexts(text2)
user.save(flush: true)
}
def destroy = {
}
}
지금 나는 다음과 같은 오류 얻을 내 사용자를 삭제하려고하면
는 : 내가 UserController.groovy에서
text.creator = 0
에 코드를 변경하는 경우
| Server running. Browse to http://localhost:8080/usertexts
| Error 2012-06-17 19:33:49,581 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver - IllegalArgumentException occurred when processing request: [POST] /usertexts/user/index - parameters:
id: 1
_action_delete: Löschen
Stacktrace follows:
Message: null
Line | Method
->> 21 | doCall in net.peddn.UserController$_delete_closure1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 19 | delete in net.peddn.UserController
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 722 | run . . . in java.lang.Thread
을 완벽하게 작동합니다.
By 덧붙여 : 나는 사용자가 삭제 될 때 Text 개체를 삭제하지 않기를 원하기 때문에이 도메인 모델을 사용했습니다. 하지만 누가 Text 객체를 만들 었는지 알고 싶습니다. 누군가이 문제에 대한 더 나은 해결책을 가지고 있다면 알려주십시오.
감사합니다. 당신이 양방향 관계 사용자 교과서하려면
def delete() {
def userInstance = User.get(params.id)
userInstance.texts.each { text ->
userInstance.removeFromTexts(text)
}
userInstance.delete(flush: true)
}
당신은 사용자가 삭제 될 때이 동작을 변경할 수 있습니다 텍스트가 삭제되지 않도록하려면이 작동하는 경우 현재의 구현으로 피터
ok ... 첫 번째 솔루션에서 동일한 예외가 발생했습니다. 다음 사용자 지정 계단식 사용하여 두 번째 솔루션을 시도했다. 나는 성공하기 전에 이것을 시도했다. – peddn
'static belongsTo = [user : User]'와 양방향 관계를 선언하면 '참조 무결성 제약 위반'이 발생합니다. 그러나 이것을 으로 선언하면 'static belongsTo = User' 응용 프로그램이 예상되는 동작을 보여줍니다. 이게 정상입니까? 아니면 버그입니까? – peddn
죄송합니다.'static belongsTo = User'라고해도 오류가납니다. 나는 Text 클래스에서 User 속성을 잊어 버렸다 :'User user'; 'static belongsTo = User'와 같은 오류가 발생했습니다 ... – peddn