도메인 클래스에 사용자 지정 ID 특성이 매핑되어있는 경우 최대 절전 모드에서 고유 제한 조건을 검사하는 이유는 무엇입니까? 개체를 업데이트 할 때 게시 된 필드 값이 DB에 저장된 것과 동일하더라도 유효성 검사가 실패합니다! 이는 양식에 아무런 변경을 가하지 않더라도 (더티 : false 및 속성 바인딩 오류 없음) 발생합니다. 이제Grails에서 업데이트시 고유하게 제약 된 필드가 실패하는 이유
class User {
Long profileId
String email
String username
String password
String title
String firstname
String lastname
String zipCode
Date lastLoginDate
static constraints = {
profileId nullable: true, blank: true
email blank: false, unique: true, email: true
username blank: false, unique: true
password blank: false
lastLoginDate nullable: true
firstname nullable: true
lastname nullable: true
zipCode nullable: true
}
static mapping = {
table 'USER_PROFILE'
id name:"profileId", column: "profile_id", generator: "sequence", params: [sequence:'userprofile_sequence']
version false
}
}
, 내가 최소한의 속성 세트와 사용자를 만들 때, 레코드가 생성됩니다 은 내가 Grails의 도메인 클래스 아래와 같이 있습니다. 그러나 같은 개체를 업데이트하려고하면 : def user = user.findByUsername ('akeel') user.lastLoginDate = new Date() user.save (flush : true) 고유 한 유효성 검사가 실패하기 때문에 아무 일도 일어나지 않습니다. . user.save (validate : false, flush : true)유효성 검사를 무시할 수 있습니다. 사용자가 추가 할 때마다 zipCode의 유효성을 검사해야하므로이 옵션이 아닙니다.
제안 된 here 제안 된 '반복되는 열의 매핑'문제를 해결하기 위해 맞춤 ID 열에 대한 제약 조건 인 profileId를 nullable로 설정해야했습니다.
이 질문은 정확히 here과 비슷한 내용이지만 제안 된 해결책은 저에게 효과적이지 않습니다.
Grails 2.1.2를 사용 중입니다. 문제를 이해하는 데 필요한 것이 있으면 알려 주시기 바랍니다.
감사합니다. 제안 된 솔루션으로 변경하면 완벽하게 작동합니다. –
[문제 제기] (http://jira.grails.org/browse/GRAILS-11118). –
해결 방법으로 사용자 객체를 업데이트 할 때'user.properties.id = 0L'을 (원래 게시물에 링크 된대로) 설정할 수 있습니다. GORM은 객체/고유 속성의 유효성을 검사하고 올바르게 다시 저장합니다. – tmarthal