¿El Grails eliminaciones en cascada cuando no se utiliza domain.delete ()?
-
10-10-2019 - |
Pregunta
Desde el sitio Grails: http://www.grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20 (GORM) .html
class Airport {
String name
static hasMany = [flights:Flight]
}
class Flight {
String number
static belongsTo = [airport:Airport]
}
A continuación, llamando delete()
en una instancia de aeropuerto se eliminarán todos los objetos de vuelos asociados (ya que belongTo aeropuerto). Si tuviera que eliminar una executeUpdate
utilizando aeropuertos hay todavía esperaba que elimine los vuelos?
Gracias
Solución
No es así. Aquí está un ejemplo rápido:
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'")
Los rendimientos (abreviado):
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
No es un problema no resuelto de hibernación que solicita la posibilidad de especificar la cascada en la consulta aquí .
Esto también se apoya en la lista de correo Griales aquí .
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow