2013-06-03 2 views
0

grails 2.2.1에서 hasMany 관계에서 객체를 삭제할 때 이상한 동작이 발생했습니다. 함께을하고있다Grails strange removeFrom * 동작

def lessonInstance = Lesson.get(lessonId) 
long id = Long.valueOf(taskId) 
def task = Task.get(id) 
lessonInstance.removeFromTasks(task) 

을 삭제하는 동안 :

삭제 함께 작동하지 있다

def lessonInstance = Lesson.get(lessonId) 
long id = Long.valueOf(taskId)  
def task = lessonInstance.tasks.find { it.id == id } 
lessonInstance.removeFromTasks(task) 

나는 모두가 일 것으로 예상하고 지금 궁금 왜 후자의 작품과 먼저 작동하지 않습니다. 다음은 도메인 클래스입니다.

class Lesson{ 
    static hasMany = [tasks:Task] 
    static hasOne = [skill:Skill]  
     static constraints = { 
     tasks(nullable: false, minSize: 1) 
     skill(nullable: true) 
    } 
} 

class Task extends Artefact{ 

    Integer experiencePoints=0 

    Integer credits=0 

    static constraints = { 
     experiencePoints(blank: false, min: 0) 
     credits(blank: false, min: 0) 
    } 
} 

고마워요!

+0

Grails가'get()'과'Lesson.tasks'가로드 된'Task'가 같은 객체라는 사실을 포착하지 않은 것처럼 보입니다. BTW'Task' 또는'Artefact'에'equals()/hashCode()'가 재정의되어 있는지 궁금합니다. –

+0

'Artefact'이 도메인 객체 (서브 클래스 전략 당 테이블) 인 경우, 앞의 경우'def task = Artefact.get (id)'를 사용해 볼 수 있습니까? – dmahapatro

+0

그냥 참고 -'blank : false'는 아무 것도하지 않습니다. –

답변

0

get과 find 사이의 캐싱 차이로 인해 문제가 발생한 것 같습니다. Difference between findAll, getAll and list in Grails에 대한 Burt Beckwith의 대답을 참조하십시오.

... 나는이 문제를 grails 콘솔을 사용하여 재현하려고 시도했으나 두 방법 모두 찾아서 접근 방법을 찾지 못했습니다.