2014-11-13 11 views
1

업데이트되지 않습니다 복합 아이디와 기록 복합 ID, 다른 필드를 업데이트하려고합니다.Grails의 : 레거시 DB - 나는</p> <p>내가의 일부 필드를 수정하지 않는 Grails의 2.3.7 프로젝트에 레코드를 업데이트하려고하는 데 문제가

그냥 하나 개의 클래스, 몇 가지 속성,하지만 난 업데이트하려고 할 때마다, 그것은 나에게이 라인을 실행하는 "고유하지 오류"가 발생합니다 :

personInstance.validate() 
if (personInstance.hasErrors()) { 
    respond personInstance.errors, view:'create' 
    return 
} 

내 클래스는 다음과 같습니다

class Person implements Serializable { 

    static constraints = { 
     name(unique: lastName) 
    } 

    static mapping = { 
     id generator: 'assigned' 
     id composite: ["name", "lastName"] 
    } 

    //Override equals and hashcode methods 
    boolean equals(other) { 
    if (!(other instanceof Person)) { 
     return false 
    } 

     other.name == name && other.lastName == lastName 
    } 
    int hashCode() { 
     def builder = new HashCodeBuilder() 
     builder.append name 
     builder.append lastName 
     builder.toHashCode() 
    } 

    String name 
    String lastName 
    String description 
} 

그리고 컨트롤러 액션 : 나는 유효성 검사를()를 사용하면

def update() { 
    def personInstance = Person.get(new Person(name:params.name, lastName:params.lastName)) 
    personInstance.properties = params 

    personInstance.validate() 
    if (personInstance.hasErrors()) { 
     respond personInstance.errors, view:'create' 
     return 
    } 

    personInstance.save flush:true 

    request.withFormat {/*etc...*/} 

} 

, 그것은 나에게 Grails의 고유 키를 던졌습니다 오류, 유효성 검사를 피할 때 고유 한 PK 오류가 아닌 BD PersonInstance.validate()를 삽입하거나 업데이트 할 것인지 Grails가 알지 못합니다.

내가 볼 수없는 올바른 방식으로이를 관리 할 수있는 방법이 있습니까? 아니면 유효성 검사를하지 않아도됩니까? 내가 잘못 했나요?

미리 감사드립니다.

답변

0

나는 GORM 매핑 DSL이 단지 하나의 id 정의를 기대한다고 생각한다. http://grails.org/doc/latest/guide/single.html#identity

+0

감사 : 그냥이 일에 당신이 개 id 라인을 결합 해보십시오 : 여기에 "복합 기본 키"에 설명 된대로

id generator: 'assigned', composite: ["name", "lastName"] 

또한, 추가로 Serializable를 구현하려면 도메인 클래스는 equals 무시하고 hashCode한다 월요일 아침 한 줄 정의를 해보겠습니다. 또한 equals 및 hashCode 재정의를 추가 했으므로 게시물에 넣는 것을 잊어 버렸습니다. 지금 수정하겠습니다. –