Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/03/2012, 03:25
Javanoob
 
Fecha de Ingreso: marzo-2012
Ubicación: España
Mensajes: 5
Antigüedad: 12 años, 2 meses
Puntos: 0
Borrado en hibernate sin cascada

Hola a todos,

estoy haciendo una aplicación principalmente para aprendizaje, se trata de algo bastante simple, usuarios y grupos con una relación n:m de manera que un usuario puede pertenecer a varios grupos y viceversa, con una tabla usuarios_grupos para mantener las relaciones, lo he hecho en en mysql con hibernate usando mapeos xml y todo funciona correctamente excepto a mi juicio el borrado, cuando borro un usuario se carga también sus registros asociados en usuarios_grupos.

La base de datos está configurada para que de un error al borrar un usuario que pertenece a un grupo, es decir habría que eliminar antes los registros en usuarios_grupos, pero al darle al método delete de hibernate el hace esto automáticamente, podría por código detectar si el usuario tiene grupos y en ese caso no permitir borrar pero ¿hay alguna manera de que salte una excepción e hibernate no haga estos borrados automaticamente?

Os paso el mapeo por si ayuda:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.ap">
<class name="org.ap.Usuario" table="usuarios">

<id name="id" type="java.lang.Long" unsaved-value="0">
<column name="id_usuario" sql-type="bigint" not-null="true"/>
<generator class="identity"/>
</id>

<version name="ver" type="java.lang.Long"/>

<property name="login" type="java.lang.String" />
<property name="password" type="java.lang.String" />
<property name="nombre" type="java.lang.String" />

<bag name="Grupos" table="usuarios_grupos" inverse="false" lazy="true" fetch="select" cascade="none">
<key>
<column name="id_usuario" not-null="true" />
</key>
<many-to-many class="Grupo">
<column name="id_grupo" not-null="true" />
</many-to-many>
</bag>

</class>
</hibernate-mapping>

Gracias