이 문제가 발생합니다. 코드는 나에게 좋아 보이는 (분명 내가 뭔가를 놓친 거지. 문제는 그것이 무엇입니까?) Grails 계단식 동작
내가 프로젝트 클래스def class project{
...
Manager manager
}
이것은 사람과 관리자 클래스 정의가
def class Person{
String firstName
String lastName
}
def class Manager extends Person{
static hasMany = [ projects: Project]
}
관계는 간단합니다. 프로젝트에는 관리자가 하나 있고 관리자에게는 많은 프로젝트가 있습니다. 내가 아는 한, 일대 다 관계에서 쌍방향 일대 다 (one-to-many)이기 때문에 저장 캐스케이드가 저장됩니다. org.hibernate.TransientObjectException : 나는 내가 다음과 같은 오류 에 의한 취득이
Project project = new Project()
Manager mgr = new Manager(...)
project.manager = mgr
project.save()
할 때 - 객체가 저장되지 않은 과도 인스턴스를 참조 세척하기 전에 transient 인스턴스를 저장 : 관리자
을 내가 할 때 이
Project project = new Project()
Manager mgr = new Manager(...)
project.manager = mgr
project?.manager.save()
project.save()
잘 작동합니다. 하지만 프로젝트는? .manger.save()가 필요하지 않아야한다고 생각합니다 !!
답변 해 주셔서 감사합니다. 네 저축 매니저가 먼저 트릭을합니다. 그러나 belongsTo는 도움이되지 않습니다. 어떤 방법으로 올바른 작업을 수행 할 수 있습니까? i) 관리자 관리자를 제거하고 static belongsTo = [manager : Manager] 또는 정적 belongsTo = 관리자 인 ii) 관리자를 제거하고 정적 belongsTo = [manager : Manager] 또는 static belongsTo = Manager입니다. 나는 둘 다 시도했지만 작동하지 않습니다. 지금은 빠른 수정이 작동하고 있습니다 – Paras
흠, 올바른 방법은 한쪽을 저장하는 것입니다. "많은면이 belongsTo를 정의하는 양방향 일대 다의 경우, 캐스케이드 전략은 한 쪽에서는"모두 "로, 다른면에서는"없음 "으로 설정됩니다." belongsTo를 사용해도 여러 단계에서 캐스케이드는 NONE입니다. 한 쪽이 아직 고집하지 않으면 많은면을 먼저 저장하는 것이 효과가 없습니다. 일반적으로 시스템에 관리자를 추가하고 저장 한 다음 프로젝트를 추가하기 때문에 이는 의미가 있다고 생각합니다. 나는 같은 일에 두 가지 일을 모두 할 수있는 경우를 볼 수 있었지만. – hvgotcodes