2010-12-15 15 views
5

Vom Grails Website: http://www.grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20(GORM).htmlWird die Grails-Kaskade gelöscht, wenn domain.delete() nicht verwendet wird?

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

Dann delete() auf einer Instanz von Flughafen Aufruf werden alle zugehörigen Flugobjekte löschen (da sie Flughafen belongTo). Wenn ich einen Flughafen unter Verwendung executeUpdate löschen würde, kann ich noch erwarten, dass es die Flüge löscht?

Danke

Antwort

4

Es tut es nicht. Hier ist ein kurzes Beispiel:

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'") 

Ausbeuten (abgekürzt):

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 

Es ist ein ungelöstes Problem Hibernate anfordernden die Fähigkeit, die Kaskade in der Abfrage here angeben.

Dies wird auch auf der Grails-Mailingliste here gesichert.

+0

Es gibt wahrscheinlich Möglichkeiten, wie Sie dies umgehen können, indem Sie hibernate (hibernate.cfg.xml) manuell konfigurieren, wenn Sie müssen. –

Verwandte Themen