2017-04-07 48 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

当我保存跟踪器时,我没有在城市进行更改,但我认为hibernate认为我也会锁定城市域。

回答

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;这应该如您所说,在保存tracker时不要更改city

注:也看看cascade evict