2017-04-07 21 views
0

내가 재산 city으로 다른 도메인 클래스를 사용하고이 도메인 클래스가 모든 테이블을 잠그지 않고 저장 방법 :Grails의

class Tracker 
{ 
    String name, value; 
    City city; 
    int hits; 
    Date date; 
} 

을 그리고 삽입 또는 갱신 값이 긴 작업 과정에서 Tracker.save();를 사용하여.

트래커가 뭔가를 저장하는 동안 도시 도메인 클래스에서 무언가를 업데이트하고 싶을 때를 제외하고는 정상적으로 작동합니다. 그리고 그것은 말하고 있습니다 Lock wait timeout exceeded; try restarting transaction. Stacktrace follows: Message: Lock wait timeout exceeded; try restarting transaction

트래커를 저장할 때 도시를 변경하지 않지만, 최대 절전 모드로 생각하고 도시 도메인도 잠근다고 생각합니다.

답변

0

하여 업데이트 한 후 세션을 tracker.save(flush: true) 을 시도하거나 세척 :

def sessionFactory 
sessionFactory.currentSession.flush() 
0

class Tracker 
{ 
    String name, value; 
    City city; 
    int hits; 
    Date date; 

    static mapping = { 
     city cascade: "delete" 
    } 
} 

를 시도에만 cascade delete는 것이다; 당신이 말했듯이, 을 저장할 때 city을 변경하지 않아야합니다.

참고 : 또한 cascade evict을 살펴보십시오.