2010-12-15 9 views
5

Dal sito Grails: http://www.grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20(GORM).htmlElimina Grails a cascata quando non si utilizza domain.delete()?

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

quindi chiamando delete() su un'istanza di Aeroporto cancellerà tutti gli oggetti di volo associate (in quanto belongTo aeroporto). Se dovessi cancellare un aeroporto usando executeUpdate posso ancora aspettarmi che cancelli i voli?

Grazie

risposta

4

non lo fa. Ecco un esempio veloce:

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

rendimenti (abbreviati):

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 

C'è un problema irrisolto Hibernate che richiede la possibilità di specificare la cascata nella query here.

Questo è anche il backup sulla mailing list Grails here.

+0

Ci sono probabilmente dei modi per aggirare questo problema configurando manualmente l'ibernazione (hibernate.cfg.xml), se necessario. –