2010-12-15 3 views
5

С сайта Grails: http://www.grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20(GORM).htmlВыполняет ли каскад Grails, когда не используется domain.delete()?

class Airport { 
String name 
static hasMany = [flights:Flight] 
} 
class Flight { 
String number 
static belongsTo = [airport:Airport] 
} 

Затем вызова delete() на примере аэропорта будут удалены все связанные с ним объекты Flight (так как они belongTo аэропорт). Если мне удастся удалить аэропорт, используя executeUpdate, могу ли я ожидать, что он удалит полеты?

Спасибо

ответ

4

Это не так. Вот простой пример:

def a0 = new Airport(name: 'Dulles').save() 
def f0 = new Flight(number: '1000', airport: a0).save() 

assert 1 == Airport.count() 
assert 1 == Flight.count() 

Airport.executeUpdate("delete Airport a where a.name = 'Dulles'") 

Урожайности (сокращенная):

Caused by: java.sql.SQLException: Integrity constraint violation FKB4318470B2E8D1BA table: FLIGHT in statement [delete from airport where name='Dulles'] 
     at org.hsqldb.jdbc.Util.throwError(Unknown Source) 
     at org.hsqldb.jdbc.jdbcPreparedStatement.executeUpdate(Unknown Source) 
     at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102) 
     ... 27 more 

Там же нерешенный вопрос Hibernate запрашивает возможность указать каскад в запросе here.

Это также скопировано в список рассылки Grails here.

+0

Возможно, вы можете обойти это, вручную настроив hibernate (hibernate.cfg.xml), если вам нужно. – 2010-12-15 18:31:36

Смежные вопросы